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