Tag: PHP

Die Droge XSS – Cross Site Scripting

Was Cross Site Scripting ist und wie es ungefähr funktioniert, war mir mehr oder weniger bekannt. Richtig realisiert habe ich es durch das Buch “PHP-Sicherheit”, das mir von http://log.446b.org empfohlen wurde. Mittlerweile bin ich süchtig. Ich kann nicht mehr vernünftig surfen. Bei keiner Homepage kann ich widerstehen. So bald ich irgendwelche Parameter in der URL sehe muss ich es einfach ausprobieren. Die typischen Lücken sind

  • Suchformulare
  • Login Formulare
  • Seite empfehlen

Aber XSS ist nur die Einstiegsdroge. Irgendwann reicht einem das aber nicht mehr aus und man kommt automatisch zu SQL-Injections. Diese Droge ist noch besser, sie hält einfach viel länger an und sie ist so heimtückisch. Nachdem man sie aber ein paar mal genossen hat, merkt man es reicht nicht mehr und man braucht wieder mehr. Als nächstes folgt dann zwangsläufig Stufe 3 – das Hacken von Servern. Man glaubt nicht wie viele Server es gibt die auf alten Apache Versionen laufen. Besonders intensiv ist die Droge, wenn die Internetseiten versucht haben durch 404 Handling zu vermeiden, dass man die Apache Meldung sieht.

Kommentar-Spam vs. tantan – Call to undefined function wp_die();

Der Preis des Erfolges eines jeden Blogs scheint der Spam zu sein. Nachdem ich meinen Server nun auch endlich wieder richtig konfiguriert hatte, bekam ich auch wieder die vielen Mails. Google Mail gruppierte diese zwar alle schön, aber es hat mich trotzdem genervt, vor allem weil es so leicht schien, Spam von nicht Spam zu unterscheiden. Nach einer kurzen Suche mit einer Suchmaschine stieß ich auf folgende Seite http://tantannoodles.com/toolkit/spam-filter/. Ich konnte es kaum glauben, das man das Plugin nur installieren mußte und nicht wie beim Captcha wieder in alle möglichen PHP Dateien eintragen mußte.

Nachdem ich es installiert hatte, stand auch gleich der erste Versuch an. Ich kopierte einfach den Spam Text, von dem ich per Mail haufenweise hatte, in das Comment Feld und bekam folgende Fehlermeldung

[php]
Fatal error: Call to undefined function wp_die() in wp-content/plugins/tantan/spam-filter.php on line 201
[/php]

Da machte sich natürlich gleich Ernüchterung breit. Also versuchte ich es mit einem richtigen Kommentar und siehe da, es funktionierte. Jetzt tat sich natürlich der innerliche Konflikt auf, was sollte man tun. Den Fehler so lassen oder nachschauen was da nicht funktioniert. Aber da wir ja hier schließlich beim BugBlog.de sind, dachte ich mir, ich schaue mir den Fehler mal an und mache daraus einen Post, weil anderen ergeht es bestimmt genauso.

Also in der entsprechenden Datei an entsprechender Stelle nachgeschaut und folgendes gefunden
[php]
$html .= ‘

< go back and edit my comment

‘;
$html .= ‘

‘;
wp_die($msg . $html);
[/php]

Da die Programmierung der Objekt Orientierung gefolgt ist, hätte es eigentlich so lauten müssen:
[php]
$this->wp_die($msg . $html);
[/php]

Dies ergibt aber auch keinen Sinn, weil wir befinden uns bereits in der Methode wp_die und eine Methode die sich nochmal selbst aufruft ohne Abbruchbedingung benötigt den ganzen Speicher und wird somit vom Server beendet. Also blieb nur noch eine Möglichkeit übrig:

[php]
die($msg . $html);
[/php]

Noch kurz gespeichert und schon bekommt der Kommentator die Möglichkeit, seinen Kommentar freizuschalten oder doch nochmal zu überarbeiten.

Typo3: Warning: mysql_fetch_assoc()

Während meiner Extensionschlacht habe ich mittlerweile das erste Opfer zu beklagen. Jedesmal wenn ich eine Seite lösche, erscheint eine Fehlermeldung

[php]
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /usr/local/typo3_src-4.1.2/t3lib/class.t3lib_db.php on line 796
[/php]

Da es eine Develop Umgebung ist, kann man es verkraften, hoffentlich sind keine weiteren Funktionen betroffen. Wie gesagt, die Seiten lassen sich löschen aber es erscheint eine Fehlermeldung. Bei den vielen Funktionen die Typo3 hat, hat man keine Chance sowas zu verhindern. Weil selbst bei einer Develop Umgebung kann man schlecht immer alles testen.

Update:
Wer die Erweiterung tt_address installiert hat, sollte sich diesen Beitrag anschauen tt_address

[random_content group_id=”211″ num_posts=”1″]

Captcha Library (captcha) – Kein Spamschutz Bild

Nach der Installtion von der captcha Extension von Kasper Skrhj wurde mir erstmal kein Bild angezeigt. Beim aufrufen der Bild Url http://www.Meine Domain.de/typo3conf/ext/captcha/captcha/captcha.php, die man im Quellcode nachlesen kann, bekam ich folgende Meldung:
[php]Fatal error: Call to undefined function imagerotate() in /home/www/host/htdocs/typo3conf/ext/captcha/captcha/captcha.php on line 78[/php]

Die Funktion imagerotate() ist, je nach PHP Installtion, nicht immer verfügbar. Bei PHP.net/imagerotate finde sich dazu folgende Anmerkung:

Diese Funktion steht nur zur Verfügung, wenn PHP mit der GD Bibliothek übersetzt wurde, die mit PHP zusammen erhältlich ist.

Beim wem dies nicht so ist, der hat ein kleines Problem. In den Kommentaren gibt es dafür zwar einen Workaround
[php]
function imageRotate($src_img, $angle) {

$src_x = imagesx($src_img);
$src_y = imagesy($src_img);
if ($angle == 90 || $angle == -910) {
$dest_x = $src_y;
$dest_y = $src_x;
} else {
$dest_x = $src_x;
$dest_y = $src_y;
}

$rotate=imagecreatetruecolor($dest_x,$dest_y);
imagealphablending($rotate, false);

switch ($angle) {
case 90:
for ($y = 0; $y < ($src_y); $y++) {
for ($x = 0; $x < ($src_x); $x++) {
$color = imagecolorat($src_img, $x, $y);
imagesetpixel($rotate, $dest_x – $y – 1, $x, $color);
}
}
break;
case -90:
for ($y = 0; $y < ($src_y); $y++) {
for ($x = 0; $x < ($src_x); $x++) {
$color = imagecolorat($src_img, $x, $y);
imagesetpixel($rotate, $y, $dest_y – $x – 1, $color);
}
}
break;
case 180:
for ($y = 0; $y < ($src_y); $y++) {
for ($x = 0; $x < ($src_x); $x++) {
$color = imagecolorat($src_img, $x, $y);
imagesetpixel($rotate, $dest_x – $x – 1, $dest_y – $y – 1, $color);
}
}
break;
default: $rotate = $src_img;
};
return $rotate;
}
[/php]

Dieser geht jedoch leider nur für 90 Grad Winkel. Wer kleinere Winkel haben möchte, muß auf ImageMagick zurückgreifen. Da dies eigentlich sowieso verfügbar sein muss, bei einer Typo3 Installation, finde ich es sehr schade, dass der Entwickler dies über PHP lösen wollte.

Wer auf das Rotieren verzichten kann braucht einfach in der Datei captcha.php Zeile 78 auskommentieren und folgendes einfügen.
[php]//$rot = imagerotate($tmpi, $da, $back);
$rot = $tmpi;[/php]

[random_content group_id=”211″ num_posts=”1″]