Mailinglisten-Archive |
Silvio Siefke wrote:
> Yannik Hampe schrieb:
>> Ja: Irgendwer versucht irgend einen Mist mit deinem Formular anzustellen.
>
> Das Formular geht an ein Perl Script. Meine Dateien haben zwar die Endungen
> PHP, enthalten aber nur 3 Zeilen PHP Code, das ist um die Zugriffe zu loggen.
>
>> Das ist wohl eher die Anleitung für den Systemadministrator zu
>> Schadensminimierung, falls der php-Programmierer unsicheren Code
>> schreibt. Durchaus wichtig, aber wie deine kontakt.php aussieht ist viel
>> wichtiger.
>
> Also bringt das nichts, was in dem Link stand?
Doch, es bringt in jedem Fall was. Aber es ist eben nur die halbe
Wahrheit. Oder wie Christoph schon sagte "als 2. Verteidigungslinie".
>
>> Die übergebenen URLs enthalten den Text
>> <?php echo md5("just_a_test");?>
>> Es wird wohl darum gehen deinen Server dazu zu bringen diesen Code
>> auszuführen.
>> Mir ist aktuell nicht ganz klar, wie dermaßen schlecht dein Code sein
>> muss, damit dieser Angriff funktioniert... Es sei denn der Code baut auf
>> einer (ehemaligen) Sicherheitslücke in php auf...
>
>
> Meine Seite: www.silviosiefke.de
Was noch fehlt bei deiner Seite:
In den Headern von deinem Server steht:
Server: Apache/1.3.34 (Debian) mod_perl/1.29 PHP/4.4.4-8+etch4
X-Powered-By: PHP/4.4.4-8+etch4
Das sind natürlich Informationen, die für einen Angreifer sehr wichtig
sind und du machst es ihnen sehr einfach daran zu kommen.
Gegen die erste Zeile kannst du etwas tun, in dem du in der httpd.conf
ServerTokens = Prod
einstellst.
Gegen die zweite Zeile kannst du etwas tun, indem du in der php.ini
expose_php = off
einstellst. Damit man die Serverversion hier:
http://www.silviosiefke.de/asdf
nichtmehr nachschauen kann, solltest du in der httpd.conf auch noch
ServerSignature Off
setzen.
Aber auch das ist eigentlich nur eine Erweiterung des Texts, den du
verlinkt hast.
Es gibt noch ein paar wichtige sehr sehr grundlegende Regeln bei der
Programmierung in php, die immer und immer wieder ignoriert werden.
Dazu gehört:
-- Variabeln vom User sind böse. --
include("php/$_REQUEST[inc].inc.php");
In $_REQUEST['inc'] kann ALLES drin stehen. Du hast keine Ahnung. Das
musst du prüfen. Sonst geht's dir wie dem TV-Steinau:
http://www.handball-steinau.de/index.php?s=/../etc/passwd%00
Genauso verhält es sich bei mysql-queries:
mysql_query("SELECT * FROM blubb WHERE bla='$_REQUEST[foo]'");
In Request[foo] kann weiss Gott was drin stehen. Da muss man einmal
mysql_real_escape() drauf anwenden. Es ist eine ganz simple grundlegende
Regel einfach zu verstehen, dass in diesen Variabeln alles drin stehen
kann. Du glaubst nicht, dass es Leute da draussen gibt, die so doof sind
und die Regel nicht bedenken? Dann schau mal hier:
http://unit21.de/main_start.php?site2display=ausgabe&bereich='
Da bekommst du auch noch den Query angezeigt, damit du dir genau
überlegen kannst, wie genau du es anstellst alle Datenbanken auf dem
Server zu leeren oder was für ein Unheil du auch immer anrichten willst.
Es herscht übrigens dieses Gerücht im Internet, dass $_POST sicherer sei
als $_REQUEST oder $_GET. Weil in $_REQUEST werden die post-daten auch
mit get daten überschreiben, die du einfach im Browser in der
Adresszeile ergänzt.
Die Sicherheit trügt. $_POST ist genauso unsicher. Man muss sich schon
etwas auskennen um eine $_POST Variable zu überschreiben, aber wer
soweit nicht denkt, der kommt auch nicht auf die Idee eine get-Variable
zu überschreiben. Jeder, der möchte kann variabeln, die in $_GET,
$_POST, $_COOKIE und $_REQUEST stehen einfach überschreiben. Rechne
IMMER damit, dass dort Mist drin steht. Wenn Register globals
eingeschaltet ist, trifft das auch noch auf jede andere Variable zu:
$a .='bla';
Funktioniert mit einer Notice, die möglicherweise abgeschalted ist,
ohne, dass du $a jemals vorher etwas zugewiesen hast. Viele
PHP-Programmierer schreiben sowas und gehen davon aus, dass $a vorher
nicht existierte. Das ist in einer Schleife manchmal verlockend, weil
man sich das initialisierende
$a='';
spart, aber das ist einfach sicherheitstechnisch ein Problem. In $a
könnte bereits etwas drin stehen!
> MFG
> Silvio Siefke
Yannik
php::bar PHP Wiki - Listenarchive