Mailinglisten-Archive |
Hallo Norbert, hallo Liste! Danke für die Vorschläge! > zuerst sollte man immer versuchen, den User von jeglichen > Handeingaben zu befreien, weil er sich sowieso nur vertippt. > Lass ihn seine Eingaben ueber DropDowns zusammen stellen ... Egal wie der normale Benutzer das eingibt, ob über drop-downs oder direkteingabe: wenn ich das Ergebnis über "eval" auswerte hab ich immer das gleiche Sicherheitsrisiko! (Ein geschickter Angreifer kann ja das Benutzerinterface einfach umgehen.) > > $ausdruck="echo $geheinmesdatenbankpasswort"; > Tip: > Wenn man den Befehlsstring einer Funktion zum Ausfuehren > uebergibt, kann der User zumindestens keine Variablen des > Haupt-Scriptes ueberschreiben oder auslesen. > Der Namensraum einer Funktion ist in sich geschlossen ... Das hatte ich auch schon überlegt, zunächst aber mal beseite gelassen. Aber ich denke, das werde ich gleich noch einbauen. (Zumal ich die Auswerten-Funktion an mehrereren Stellen brauche, und eine Funktion da ja schon Sinn macht.) > > $ausdruck="include 'hackerscript.php';" > Tip: > wenn include('boesesScript.php'); funktioniert, hat der > Angreifer schon mal einen FTP-Zugang auf Deinem Host > und braucht also keine "Hilfe" mehr ... ;-) Das war ja genau das, was ich geschrieben hatte ;-) Deswegen suche ich ja eine Alternative zu eval. Ich war vollkommen davon überzeugt, dass eval zwei Parameter hat, und das man im zweiten, optionalen Parameter angeben kann, was alles im ersten Parameter erlaubt ist. > > $ausdruck="mysql_query('DROP something FROM tabelle');" > Tja: > Unsere lieben SQL-Befehle machen es Angreifern sehr leicht, > denn selbst wenn es kein Connect gibt, versucht PHP mit > den vermeintlich 'ueblichen' Daten auf die DB zuzugreifen. Da im Endeffekt "$ausdruck" (=die Benutzereingabe) in einer Datenbank gespeichert ist, muss auch eine Datenbankverbindung offen sein. Bei dem Beispiel ging es mir darum zu zeigen, dass mit runden Klammern allgemein Funktionsaufrufe möglich sind, was nicht in meinem Sinne ist (im besonderen nicht, wenn dabei meine Datenbank gelöscht wird). Deswegen ist ja mein bisheriger Ansatz: Runde Klammern und Anfürungszeichen(einfache und doppelte) raus, dann ist es nicht möglich, dass durch Manipulation des Strings '$ausdruck' Funktionen aufgerufen, oder fremder Code eingebunden wird, oder? Der PHP-Parser nimmt doch nicht etwas URL-Encodierten Quelltext oder irgendetwas in der Richtung an, oder? Ich bin über jeden Vorschlag dankbar, denn noch gefällt mir der Lösungsweg über eval() nicht so richtig. Grüße! Bastian
php::bar PHP Wiki - Listenarchive