PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


PHP und Apache Versionen von PHP Blogs

with 17 comments

Ich habe mal einen kleinen Test gemacht: Ich habe die PHP-Blogs aus meiner großen PHP-Blog Sammlung genommen, dazu noch einige Ergebnisse wenn man nach „php blog“ googled, und mir die PHP-Versionen angeschaut, wenn welche angegeben sind. Und bei einigen kann ich nur mit dem Kopf schütteln.

Aktuell sind zur Zeit: PHP 5.3.8 und PHP 5.2.17, wobei 5.2.x nicht mehr supported wird. PHP 5.3 ist also eigentlich Minimum.

Von denen, die ihre PHP Version bekanntgeben sind nur 5 Seiten mit PHP 5.3.x unterwegs. 17 mit PHP 5.2.x, PHP 5.0 ist mit einem Eintrag vertreten, und PHP 4.4 benutzen sogar noch 2 Leute. Ich kann nur hoffen dass letztere ihre Ausgabe faken und dass das nicht wirklich korrekte Informationen sind. Wobei 4.4.9 neuer ist als 5.2.0 . Beim Apache sind die meisten auf Apache 2.2 angelangt, aber auch dort gibt es alte Versionen von 2.2 die Sicherheitslöcher haben, und auch Apache 2.0 und Apache 1.3 Installationen. Apache 2.2.3 ist beispielsweise über 5 Jahre alt.

Wenn ihr schon alte PHP- und Apache-Versionen einsetzt, dann schaltet wenigstens die entsprechenden Header aus in der php.ini:

expose_php Off

bzw. beim Apache:

ServerSignature On|Off|EMail
ServerTokens Minimal|ProductOnly|OS|Full

oder noch besser: UPDATEN!! PHP 5.3 gibt ca. 20-30% Performance frei Haus, ganz zu schweigen von den neuen Möglichkeiten und den geschlossenen Sicherheitslücken. Wenn euer Hoster nicht updaten möchte oder kann, dann wechselt den Hoster…

Hier die Ergebnisse:

Weiterlesen »

Written by Michael Kliewe

August 26th, 2011 at 9:55 am

Das Problem mit HEAD Requests in PHP

with 25 comments

Ich bin gerade auf ein interessantes Verhalten gestoßen das eventuell große Probleme bereiten kann. Wahrscheinlich nur sehr wenige von euch werden das hier wissen, trotzdem ist es sehr interessant und provoziert eventuell Probleme und Sicherheitslücken.

Das hier vorgestellte Verhalten ist wahrscheinlich kein Problem von PHP sondern eventuell vom Webserver, aber ich weiß es nicht genau. Vielleicht kann ja mal jemand mit Tomcat oder nginx dieses Problem nachstellen.

Wir nehmen folgendes Script als Beispiel:

<?php
file_put_contents('/tmp/outp', '1');

echo 'start';
file_put_contents('/tmp/outp', '2', FILE_APPEND);
echo 'ende';

Ich glaube ihr stimmt mir alle zu wenn ich behaupte: Das Script erstellt immer eine Datei mit dem Inhalt „12“. Es kann zum Beispiel nicht passieren dass nur „1“ in der Datei steht.

Weiterlesen »

Written by Michael Kliewe

August 25th, 2011 at 1:53 pm

Posted in PHP,Server-Software

Tagged with , ,

Testet eure Apache Server auf die neue 0-Day DOS-Lücke

with 19 comments

Ich möchte wenig Zeit verlieren: Heute wurde ein sehr leichter Angriff bekannt, mit dem man viele voll gepatchte Apache 2.2 Server ziemlich einfach abschießen kann. Details dazu finden sich sowohl bei Heise als auch bei Golem.

Es geht also um den HTTP Range-Header. Eigentlich dazu gedacht, Downloads zu pausieren und zu resumen, ist der Apache anfällig wenn man ihm sehr viele Ranges hinwirft, er verbraucht dann unheimlich viel RAM, geht dann an den Swap-Speicher, und dann beginnt Linux damit Prozesse zu beenden weil der Arbeitsspeicher total überlastet ist. Wenn man Pech hat kommt man nicht mal mehr via SSH drauf.

Es gibt einen Exploit, der in Perl geschrieben ist, und der einen Server erst darauf testet ob er anfällig ist, und wenn er es ist, beginnt er damit viele Requests loszuschicken mit vielen Range-Headern. Nach wenigen Sekunden ist der Server nicht mehr erreichbar. Dieser Exploit wird von Heise und Golem verlinkt, also nahezu jeder Script-Kiddy wird nun loslaufen und es benutzen, es wird nur Perl und das Perl-Modul Parallel::ForkManager benötigt.

Weiterlesen »

Written by Michael Kliewe

August 24th, 2011 at 9:01 pm

Posted in PHP

Mini-Storage-Grid crowdsourced

with 25 comments

Ich habe eine verrückte Idee, und ihr sagt mir ob wir das umsetzen können oder nicht. Dabei bin ich auf eure Mitarbeit angewiesen, denn das verrückte daran ist dass es ein verteiltes System sein soll, wobei jeder seinen Client selbst bauen wird (Crowdsourcing).

Also, wir brauchen Speicherplatz, den gibt es da draußen zuhauf, meist auch kostenlos, bei einem Anbieter, „in der Cloud“ oder auch als Peer-to-Peer Grid, ich weiß. Aber es gibt sicher noch kein Speicher-Grid das nur aus unterschiedlichen Nodes besteht. Jeder von euch, der mitmachen möchte, muss sich seinen eigenen Client basteln, theoretisch egal in welcher Programmiersprache. Natürlich müssen die Clients miteinander Daten austauschen, in diesem Fall eure Dateien. Wir brauchen als ein möglichst kleines effizientes Protokoll, mit dem man sich finden und Daten austauschen kann.

Weiterlesen »

Written by Michael Kliewe

August 23rd, 2011 at 8:34 am

Posted in PHP

Tagged with , ,

Text in Bild einfügen: ImageLabeler

with 14 comments

Heute gibts ein kleines Script, das zu einem gegebenen Bild einen Text hinzufügt, also beispielsweise einen Copyright-Hinweis rechts unten einfügt. Im Bild rechts sieht man wie ich den Text ‚PHPGangsta‘ in der Position rechts unten eingefügt habe, mit roter Schriftfarbe und weißer Umrandung.

Es ist die erste Version mit Basisfunktionalität. Aktuell können beeinflusst werden:

  • Text
  • Schriftfarbe
  • Hintergrundfarbe
  • Schriftgröße
  • Dateiausgabeformat (jpg, png, gif) und Qualität
  • Positionen: alle 4 Ecken, zentriert oder individuelle X/Y Koordinaten
  • Rahmen um den Text und Hintergrundfarbe

Auf Github findet ihr das Projekt ImageLabeler, die Klasse könnt ihr einfach benutzen:

<?php

require_once 'ImageLabeler.php';

$imageLabeler = new ImageLabeler();
$imageLabeler->setFilePath('/path/to/image.jpg')
             ->setText('PHPGangsta')
             ->render();
echo $imageLabeler->getRenderedFilePath();
// outputs something like /tmp/63D6.tmp.png

Es gibt aber noch einige weitere Einstellungsmöglichkeiten:

<?php

require_once 'ImageLabeler.php';

$imageLabeler = new ImageLabeler();
$imageLabeler->setFilePath('/path/to/image.jpg')
             ->setText('PHPGangsta')
             ->setPosition(ImageLabeler::POSITION_BOTTOM_CENTER)
             ->setFontSize(3)
             ->setFormat('png')
             ->setFontColor('0000ff')
             ->setBackgroundColor('ffffff')
             ->setTargetFileQuality(80)
             ->setBoxBorderThickness(2)
             ->setBoxBorderColor('ff0000')
             ->render()
             ->outputRenderedImage();

Man könnte sich natürlich noch weitere Dinge vorstellen wie TTF-Schriftarten, Transparenz, Rotation usw.

Eine Frage zum Schluss noch: Sollte ich solche Klassen in meinen eigenen Namespace packen? Nachteil wäre dass die Klassen dann bei PHP < 5.3 angepasst werden müssen…

Written by Michael Kliewe

August 22nd, 2011 at 9:39 am