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. februar
4
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-setninger

if(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_INT

FILTER_VALIDATE_EMAIL

FILTER_VALIDATE_URL
• Sanitizing, remove any illegal character

FILTER_SANITIZE_STRING

FILTER_SANITIZE_NUMBER_INT



Sjekk 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');
KristiansandPHP meetup 5

KristiansandPHP meetup 5

  • 1.
  • 2.
    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.
  • 4.
    Det skjer myei 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. februar 4
  • 5.
    5 6 PHP bøker hosO`Reilly siden i sommer :-)
  • 6.
  • 7.
  • 8.
    Input - trustno one! • Først og fremst: hindre SQL injection • Og ca like viktig: sikre god/riktig input til vår kode
  • 9.
    SQL injection • Detviktigste og beste vi kan gjøre, er prepared statements (PDO, MySQLi eller OCI8)
  • 10.
    Validering er littmer styr…
  • 11.
  • 12.
    Laravel har validator(i egen klasse eller inkludert i store-metoden)
  • 13.
    Profundo WebAdmin • IProfundo har vi har et pattern-array med regex som automatisk sjekkes lagring i databasen
  • 14.
  • 15.
    • Caste tilint:
 $id = (int) $_GET(‘id’); • If-setninger
 if(isset($_GET[‘price’])
 $price = $_GET[‘price’];
 if($price < 100)
 $pris = 100; Metoder for tall NO!
  • 16.
    Metoder for strenger •Strings med default verdi
 
 $title = (isset($_GET[‘title’])) ? :’Lorem Ipsum’; • String max lengde
 $title = substr($title,0,20); NO!
  • 17.
    Vi kan spareoss 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);
  • 18.
    Metode flagg • Validating,determine if the data is in proper form
 FILTER_VALIDATE_INT
 FILTER_VALIDATE_EMAIL
 FILTER_VALIDATE_URL • Sanitizing, remove any illegal character
 FILTER_SANITIZE_STRING
 FILTER_SANITIZE_NUMBER_INT
 
 Sjekk php.net for flere :-)

  • 19.
  • 20.
    Output - XSS(Cross Site Scripting) • Passe på brukerene våre • Escape output fra database, webservice, fil osv.
  • 21.
    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…

  • 22.
  • 23.
    Symfony & Laravel •Håndtert for deg automatisk i Twig/Blade: {{ $var }}
  • 24.
  • 25.
    CakePHP • Ikke automatiskescaping, men med en kjekk liten hjelpefunksjon h(), er det ingen unnskyldning: <?= h($user->title); ?>
  • 26.
  • 27.
  • 28.