Inventis @ Dutch PHP Conference 2010
Dit jaar was het weer zover, 2 jaar geleden was ik alleen aanwezig op het grootste PHP evenement in de benelux: Dutch PHP Conference. Dit jaar werd ik vergezeld door collega Kim die samen met mij afzakte naar de RAI in Amsterdam voor de DPC tutorialday.
Het is elk jaar vroeg opstaan om naar DPC af te zakken maar zoals altijd is de trip zelf al half de fun. Zeker als je niet alleen moet reizen. De trein om 7u in Weert stond dan ook op ons te wachten om richting Amsterdam af te zakken. Na een treinrit van ongeveer een 1u45m kwamen we aan op Amsterdam Centraal waar we de tram richting RAI namen. Na een kort spurtje waren we net op tijd binnen op onze tutorial, de slides stonden al klaar op het scherm en de sprekers begonnen net aan hun tutorial. Kim koos voor Building a social network with Drupal in de voormiddag en Evolution of Web Security in de namiddag terwijl ik koos voor de dagvullende tutorial Zend Framework application patterns. Ieder van ons geeft hieronder zijn verslag van elk van deze tutorials.
De tutorials
Buidling a Social network with Drupal
Deze tutorial werd gegeven door Marcus Deglos, een fervent PHP developer uit de UK die tevens lessen geeft in Drupal development en deployment. Zijn CV staat bol van Drupal sites en gerelateerde projecten en hij was dus ook de perfecte persoon voor deze tutorial. Er was een grote opkomst voor de sessie, en uiteraard waren er de nodige problemen aangezien iedereen verantwoordelijk was om een laptop mee te brengen. Nadat Marcus iedereen professioneel verder geholpen had (behalve dan die 1 persoon die gewoon een Microsoft IIS7 server geïnstalleerd had, die had pech) konden we beginnen. Marcus legde het programma van de 3 uur durende tutorial uit en begon meteen bij stap 1: de installatie. We kregen allemaal een usb stick met daarop alle bestanden die we nodig hadden om de volledige tutorial door te komen en mochten al een database aanmaken met de correcte rechten. Daarna gingen we redelijk snel door de weinige stappen die nodig zijn om Drupal te installeren en kon het echte werk beginnen.
We kregen eerst een globaal overzicht van alle settings en dingen die belangrijk waren en begonnen met het installeren van de extra modules. Dit waren er heel wat, 18 in totaal, maar alles ging vrij vlot. Een paar mensen hadden wel wat problemen met een beperkte memory limit, en al meteen werd duidelijk dat Drupal graag en veel geheugen gebruikt. De volgende stap was de custom content types voor nieuws toevoegen en met CCK uitbreiden tot we alle velden hadden die we nodig hadden. Daarna begonnen we met de benodigde views aan te maken en een uurtje na de start van de tutorial hadden we eigelijk al de basis: nieuws, custom url's voor SEO en teasers. Daarna kwam dan het activeren van de forum module en het aanmaken van een paar test fora, wat iets van een 15 minuten duurde. Na al dat harde werk besloot Marcus dat we voorlopig genoeg gedaan hadden en was het tijd om een koffie te gaan drinken en van een muffin te genieten.
Na de pauze gingen we op volle kracht verder met het installeren van een door Marcus zelf geschreven blog module aangezien hij niet zo lovend was over de standaard module (en terecht). Een custom content type en een uitgebreide view met argumenten later was ook dit onderdeel helemaal klaar. Het laatste grote onderdeel was het maken van een member directory, wat ook helemaal niet moeilijk was. We moeten de content_profile module activeren, het content type editeren, wat validatie regels instellen, een view opstellen met filters en als laatste moesten we dan ons custom profile als standaard activeren. Tot slot kwamen dan nog kleinere dingen zoals het activeren van de add-this module, de fivestar module en als laatste de twitter module. Dan hadden we een mooie basissite met nieuws, blog, fora, member directory, ratings, twitter en share functies. Zeker niet slecht als je weet dat we uiteindelijk slechts een 2.5u echt bezig geweest zijn. Natuurlijk zal het verder uitbouwen van deze website nog wel wat tijd vergen maar het was toch opnieuw een knap staaltje van hoe veel je kan bereiken in beperkte tijd met Drupal.
Evolution of Web Security
Mijn 2de tutorial werd gegeven door Chris Shiflett, een zeer bekende security consultant en tevens oprichter van een Analog.coop, een groep designers en developers die als doel heeft om mooie, veilige en informatieve websites te maken. Hij begon bij het begin, tevens een groot struikelblok voor de meeste mensen: filter input, escape output. Hoewel dit betrekkelijk makkelijk te implementeren is gebeurt het vaker niet dan wel. De eerste populaire manier om een site uit te buiten is via XSS. Je kunt er bijna alle kanten mee uit, van het stelen van cookies tot het stelen van een login en wachtwoord dat dankzij de auto-fill in van verschillende browsers mogelijk geworden is. Enkel de Opera browser beschermt zijn gebruikers momenteel standaard tegen het uitbuiten van de auto-fill functionaliteit, er is dus nog wel wat werk aan de winkel voor browser ontwikkelaars!
Ook werd het belang van valid HTML en het meegeven van een character encoding benadrukt, een javascript bestand in utf-7 zal standaard door htmlentities niet verwijderd worden wat wil zeggen dat wanneer je geen character encoding gedefinieerd hebt, of dat je html pagina niet valid is, de kans redelijk groot is dat het javascript uitgevoerd zal worden omdat de browser zelf zal raden wat de content type van de pagina is. Redelijk gevaarlijk dus!
De volgende stap was CSRF. Het komt er op neer dat je de gebruiker naar een url laat surfen van een andere website, maar wel in naam van de gebruiker zelf. Chris gaf als voorbeeld de logout link. Vaak worden deze niet beveiligd met een check, dus wanneer je op je website bv. een verborgen iframe toevoegt dat naar twitter.com/logout surft is de gebruiker uitgelogd. Natuurlijk kan dit niet zoveel kwaad, maar het kan wel gevaarlijk zijn in combinatie met bv. 1-click order van amazon.com. Gelukkig is de beveiliging tegen dit soort praktijken ook voor handen, je kan elke keer een unieke token meesturen naar de pagina en verwachten dat deze token in elke request zit. Vermits de token uniek is zal het bijna onmogelijk zijn om deze te raden en kun je je website zo beveiligen tegen dit soort aanvallen.
De volgende stap is dan een combinatie van XSS dat door middel van AJAX aan CSRF doet. Het voorbeeld dat Chris gebruikte was de "Samy is my hero" worm die MySpace teisterde. Samy had een XSS lek gevonden in de filters van myspace zodat hij een script kon schrijven dat ervoor zorgde dat iedereen die op z'n pagina kwam een ajax request deed om hem als vriend toe te voegen. Hoewel MySpace de token beveiliging gebruikte kon Samy deze makkelijk omzeilen door via AJAX eerst een pagina op te vragen in naam van de gebruiker, de token te zoeken in het antwoord en dan een nieuwe request te doen met de gevonden token. Nadien voegde hij dan nog een extra payload toe die er voor ging zorgen dat de code automatisch toegevoegd werd aan het profiel van de bezoeker. Op die manier creëerde hij dus een worm die zich razendsnel verspreidde en werd hij even de persoon met de meeste vrienden, hij kreeg zo'n miljoen friend requests in minder dan 24u.
Het grote voordeel van AJAX is gelukkig dat het niet mogelijk is om AJAX request uit te voeren naar een ander domein. Maar in flash kan dit echter wel wanneer je de cross-domain policy op '*' zet, zo kun je toch requests uitsturen via flash naar een ander domein dan hetgene waarop je script staat. Chris vertelde dat hij een lek gevonden had in flickr waardoor hij volledige controle had over gebruikers die ingelogd waren doordat flickr elk domain toestond in z'n cross-domain policy xml. Dit was meteen het einde van het laatste grote blok en er mochten vragen gesteld worden. Deze gingen over verscheidene zaken, van de beveiligingsproblemen die ontstaan door gebruik van smartphones, tot de privacy problemen die ontdekt werden door EFF waardoor het toch mogelijk is om een gebruiker redelijk nauwkeurig te tracken, zelfs zonder cookies. Het was een zeer interessante tutorial over de moeilijkheden waarmee developers geconfronteerd worden in het dagelijks leven en die nogmaals benadrukte dat het internet best wel een gevaarlijke plek kan zijn voor niet technisch aangelegde mensen.
Zend Framework Application Patterns
Met het Zend Framework is het heel simpel om een hele applicatie op te zetten of een MVC applicatie te bouwen. Maar hoe je nu precies te werk gaat, welke service layers er zijn en hoe je de vele componenten van het framework samen doet werken in een modulair opgebouwde applicatie is voor velen nog een groot vraagteken.
In deze tutorial gingen Matthew Weier O'Phinney and Rob Allen dieper in op enkele patterns waarmee je geconfronteerd wordt bij Application Design met het Zend Framework. Zo kwamen ondermeer REST Webservices, View/Layout logic, Service layers, ACL, Zend_Application, Advanced Routing, Zend_Navigation en Caching aan bod.
Vooral het onderdeel Zend_Application droeg mijn interesse weg. Dit omdat Zend_Tool in enkele regels voor jou een hele applicatie opzet via de commandline maar hoe deze automatisch gegenereerde applicatie met dingen zoals Resources, Classes en Configuration omspringt is was voor mij nog altijd een raadsel. Door Matthew werd duidelijk gemaakt hoe je resources moet laden, welke resources er zijn en hoe je met module specifieke bootstraps moet omspringen.
Naar het einde toe volgde er nog een zeer duidelijke uiteenzetting van Zend_Form decorators, een onderdeel van het Zend Framework wat velen onder ons nog steeds niet volledig begrijpen. Na de uitleg van Rob Allen was alles omtrent Zend_Form en decorators voor iedereen kristalhelder. Veel van de kracht en het nut van decorators werd ook duidelijk gemaakt aan de hand van de voorbeelden die Rob Allen presenteerde. Allemaal real-life voorbeelden van Zend_Form implementaties.
Omdat we op het einde nog wat tijd over hadden heeft Matthew ook nog een heel stuk gewijd aan Context Switching. Dit is de techniek waarbij je de output van je script bepaalt aan de hand van de request. Zo kan je aan de hand van de headers van je request bepalen of je response in json, xml of html moet zijn. Allemaal via één en dezelfde url. Enorm handig bij REST webservices bijvoorbeeld.
Al bij al was de tutorial zeer de moeite, zeker de onderdelen die onmiddellijk toepasbaar zijn zoals Zend_Application en Context Switching waren alleen al de moeite waard om de tutorial bij te wonen.
Post-conference social stuff
Zoals bij elke conference is er na alle activiteit overdag ook gelegenheid om 's avonds met andere aanwezigen te socializen. Aangezien wij nog diezelfde avond de trein terug moesten nemen naar Weert kozen we om niet samen met de grootste groep buiten het stadscentrum te gaan eten maar met een kleinere groep in een indonesisch restaurant kort bij Amsterdam Centraal. Samen met @ThijsFeryn, @sschuermann, @DASPRiD, @coudenysj en Arno hebben we nog genoten van gezellig samen (en vooral lekker) eten en de nodige nerd-talk en zever die je kan verwachten van dit gezelschap. Al bij al een zeer geslaagde dag waar we enkele interessante contacten hebben gelegd en vooral veel hebben opgestoken.
Seen you next year at DPC2011!
Meer info en foto's vind je via volgende links



1 reacties tot nu toe
Pascal Wevers zei 2 jaar geleden: