Raketenhandbuchleser: mysql: Login

Beitrag lesen

Zudem hast du noch eine weitere Lücke eingebaut. In der Zeile trigger_error( 'Nicht erwarteter Referer: ' . $_SERVER['HTTP_REFERER'] . ' ' . $str, E_USER_ERROR ); wird der HTTP_REFERER nicht maskiert. Wenn der Server so konfiguriert ist, dass er PHP-Fehler ausgibt, ermöglich das einem Angreifer JavaScript einzuschleusen.

Schaun wir mal:

<?php

error_reporting(E_ALL);
ini_set("display_errors", 1);
include '<script>alert("Böse");</script>';

Ausgaben im Browser:

Warning: include(<script>alert("Böse");</script>): failed to open stream: No such file or directory in /var/www/seminar/htdocs/test/test.php on line 5

Warning: include(): Failed opening '<script>alert("Böse");</script>' for inclusion (include_path='.:/usr/share/php') in /var/www/seminar/htdocs/test/test.php on line 5

Warum kommt das alert nicht?

Quelltext:

<br />
<b>Warning</b>:  include(&lt;script&gt;alert(&quot;Böse&quot;);&lt;/script&gt;): failed to open stream: No such file or directory in <b>/var/www/seminar/htdocs/test/test.php</b> on line <b>5</b><br />
<br />
<b>Warning</b>:  include(): Failed opening '&lt;script&gt;alert(&quot;Böse&quot;);&lt;/script&gt;' for inclusion (include_path='.:/usr/share/php') in <b>/var/www/seminar/htdocs/test/test.php</b> on line <b>5</b><br />

Objektive Gegenprobe, denn der Browser könnte das manipuliert haben. Also noch :

wget -O- http://127.0.0.1/test/test.php

... zeigt exakt obigen Quelltext.

Fazit:

  • PHP behandelt selbst alle Strings in Fehlermeldungen.

Wenn der Server so konfiguriert ist, dass er PHP-Fehler ausgibt, ermöglich das einem Angreifer JavaScript einzuschleusen.

Das ist also nicht „falsch verstanden“, sondern falsch.