Linkpool Nummer 21
Dieses Mal sind es ein paar mehr Links geworden, damit solltet ihr locker über das Wochenende kommen.
Die guten Entwickler drücken häufig F5:
Herausfinden ob das PHP Script über eine TTY-Schnittstelle aufgerufen wurde:
Ein „Open Platform as a Service“-Projekt mit PHP Support, muss ich mir dringend mal im Detail anschauen:
Der Streit zwischen Heise und Facebook über 2-Klick-Buttons:
Sehr interessanter kritischer Artikel über das PHP 5.3.7 Desaster, fehlschlagende Unit-Tests und den Entwicklungsprozess von PHP (Englisch):
PHPStorm 2.1.4 released:
Arbeiten mit PHAR-Archiven:
Umfangreiche Artikelserie über PHP Unit-Testing:
- http://www.dragonbe.com/2011/08/quality-assurance-on-php-projects_17.html
- http://www.dragonbe.com/2011/08/quality-assurance-on-php-projects_23.html
- http://www.dragonbe.com/2011/08/quality-assurance-on-php-projects_28.html
OAuth mittels der PECL Extension Oauth:
Animierte CAPTCHAs und GIFs selbst erstellen
Da ich noch nie mit PHP ein animiertes GIF erstellt habe wollte ich das mal testen. Um auch etwas halbwegs sinnvolles zu tun habe ich eine Klasse erstellt die animierte CAPTCHAs erstellen kann.
Bei animierten GIFs und PHP gibt es im Prinzip 2 Lösungen: Man nutzt Imagick, oder man baut das GIF-Format binär nach. Für letzteres gibt es bereits die Klasse GIFEncoder, die ich auch hier nutze. Die GD-Funktionen von PHP bieten leider keine Möglichkeit (mehr), animierte GIFs zu erstellen.
Das Projekt AnimatedCaptcha liegt auf Github. Man übergibt der Klasse eine Zeichenfolge, stellt ein paar Parameter ein und erhält als Ergebnis ein animiertes GIF. Ich habe ein Plugin-System eingebaut, sodass weitere Plugins schnell erstellt werden können. Ich habe bereits 3 angelegt:
MovingRectangle:
Snow:
RollingBall:
Diese 3 Plugins haben jeweils weniger als 40 Zeilen Code. Hier 2 Beispiele der Benutzung:
Die Reporting-Funktion der Content-Security-Policy (CSP)
CSP hatte ich vor fast 2 Jahren bereits vorgestellt, mittlerweile hat es eine gute Verbreitung gefunden, sodass wir uns nochmals die Details anschauen. CSP ist ein Header, den der Server an den Browser schickt, und darin festlegt, von wo Javascripte, Bilder, CSS, Media-Dateien und mehr geladen werden dürfen. Mit sinnvollen Einstellungen ist es möglich, Cross Site Scripting (XSS) sowie Clickjacking zu verhindern, eine dieser essenziell wichtigen Einstellungen ist das Verbot von Inline-Javascript. Falls also ein Angreifer Javascript beispielsweise in die Datenbank einfügen kann, und bei der Ausgabe nicht oder falsch escaped wird, wird das Inline-Javascript das der Angreifer platziert hat nicht ausgeführt, XSS ist effektiv unterbunden.
In der Apache Konfiguration kann das beispielsweise so aussehen:
<VirtualHost *:80> DocumentRoot /path/to/wwwroot ServerName domain.de Header add X-Content-Security-Policy "allow 'self'; img-src images.domain.de; script-src static.domain.de;" </VirtualHost>
oder hier mittels PHP gesetzt:
<?php header("X-Content-Security-Policy: allow 'self'; img-src images.domain.de; script-src static.domain.de;");
Sollten nun Bilder oder Javascripte eingebunden sein die nicht von den angegebenen Domains kommen wird der Browser sie blockieren und nicht laden. Es gibt neben img-src und script-src auch noch frame-src, xhr-src und weitere.
Zend_Config_Ini, Arrays und die Vererbung
Ich mag .ini Konfigurationsdateien, und deshalb nutze ich auch bei Zend Framework Projekten immer die application.ini . Damals habe ich gelernt dass man Arrays so definiert:
[production] ... server.0 = 192.168.0.1 server.1 = 192.168.0.2 [development : production] … server.0 = 10.0.0.1 server.1 = 10.0.0.2
Im ZendFramework Code kann ich dann das server-Array so nutzen:
Präsentationen der FrOSCon 2011
Letztes Wochende fand die alljährliche FrOSCon in Sankt Augustin statt. Es gab einen speziellen PHP Raum, und demnach auch einige PHP Talks sowie einige verwandte Präsentationen in anderen Räumen, ich versuche die interessantesten hier aufzulisten:
Singletons in PHP – Why they are bad and how you can eliminate them from your applications
Gordon Oh.
Session Management für skalierbare Web Projekte
Martin Schönert
Modern PHP graphics with Cairo
Michael MacLean