Injection: Welche Absicherung notwendig?

  • Hi,


    ich habe mich erst vor kurzem in PHP gewagt und als ich auf Hackerangriffe und das Schlagwort "Injection" gestoßen bin, hab ich die Problematik bislang so verstanden, dass der Hacker Codes in die Eingabefelder eingibt und damit andere Befehle an die Seite schickt.
    Ich habe Standartabsicherungen gegen die gängigen Zugriffsversuche gefunden, die bestimmte Zeichen unterbinden, die in gängigen Befehlen enthalten sind (z.B. \\n oder cc:).
    Kurz darauf habe ich in einem PHP Tutorial ein Kontaktformular gesehen, das ungefähr so aussieht:




    Meine Frage:
    Ist bei so einem Gerüst eine Absicherung wie oben beschrieben überhaupt notwendig? Wenn ich es richtig verstehe, wird die Eingabe des Hackers doch sowieso nicht als Befehl geschickt, sondern landet einfach nur Zeichen für Zeichen in meiner Mail als zitierter Teil der Nachricht, oder? Also, was ich meine ist, dass die Eingabe des Hackers sowieso nicht in der mail-function landet, sondern in der $nachricht zitiert wird.


    Danke schonmal für die Aufklärung.

  • Code
    [code=php]hier schreibe ich im forum php code herein, damit es auch schön und übersichtlich aussieht ..

    [/code]
    Hallo. Grundsätzlich wird ALLES gefiltert was vom Nutzer hereinkommt.

    PHP
    foreach( $_POST AS $key => $value )
    {
        $value = htmlspecialchars($value);
    }
    foreach( $_GET AS $key => $value )
    {
        $value = htmlspecialchars($value);
    }
  • Als Befehl wird der Input des Benutzers nicht genutzt, solange Du das nicht verursachst durch zB "eval" (ist eine Funktion - siehe php.net)


    Aber sobald Du den Input, also den Text, des Nutzers im ausgibst, kann es Probleme geben.
    Auch wenn Du den ungefilterten Text des Users per eMail als HTML verschickst kann es Probleme geben.



    Thema Output: http://www.php-kurs.com/gaestebuch-absichern.htm
    Zum Thema eMail: http://www.php-kurs.com/email-per-php.htm



    unkown-6363
    Falls Du mal ein Array (checkboxes[] ...) erwartest :) :

  • Generell macht es Sinn, für jegliche Eingaben die vom Benutzer kommen eine Funktion zu schreiben, die die Eingaben bereinigt.
    Natürlich kann man das auch jedes Mal neu schreiben, allerdings macht es durchaus Sinn das zu speichern und bei Bedarf oder falls einem eine Lücke auffällt etwas in die Funktion hinzuzufügen.. Dafür gibts schließlich Funktionen ;)

  • Habe mir die Antworten jetzt durchgelesen, andere Beiträge im Internet dazu gelesen und folgende Fragen aufgeworfen:


    Reicht denn htmlspecialchars? Es gibt doch auch andere Schreibweisen, die damit nicht verhindert werden oder (\\n usw.)? Ich dachte deshalb gibt es die Variante (was lauras glaub ich meint), dass man Filter für die Eingaben anlegt, die bestimmte Zeichen unterbinden.


    Bzgl. cottons Aussage:
    In der Version, die ich im Eingangspost gezeigt habe, wird doch, wenn ich es richtig verstehe, die Eingabe des Nutzers nicht direkt ausgegeben. Es wird nur eine vom Seitenbetreiber bereits geschriebene Nachricht ausgegeben und weitergesendet, in der die Eingaben des Nutzers zitiert werden.
    Deshalb eben die Frage, ob man da überhaupt Sicherheitsvorkehrungen braucht, weil eigentlich dürften Hackversuche doch einfach nur in der Nachricht dann buchstäblich zitiert stehen, oder nicht? Also als ich das ausprobiert habe, stand bei mir dann zB. einfach nur in der Nachricht der Mail "Name: '<h1>Test</h1>'"

  • Stimmt, die user-Eingaben werden in diesem Script nicht ausgegeben.
    Aber Du sendest es ja irgentwo hin. In dem Fall an Deine eMail.
    Und dort wird der Text entweder im Browser (webmail), oder im eMail-programm angezeigt.
    eMails sind nicht immer nur Text.


    Du kannst das hier mal kopieren und testen:


    $_POST["text"] soll hier mal simulieren, dass der user versucht irgentwas Böses einzuschleusen. In dem Fall eine einfache Weiterleitung im Browser.
    Das könnte aber auch alles Mögliche sein. Irgentwas wirklich schlimmes.
    (wenn das jetzt aber ein Text in nem Gästebuch wäre, dann wäre das schon schlimm. Denn jeder Besucher würde an die url weitergeleitet=)


    Hier jetzt das Gleiche mit htmlspecialchars():

  • Das ist ja interessant. Habs ausprobiert.


    Aber dieser exemplarische "Eingriff" funktioniert auch nur, weil die Nachricht als Echo wieder ausgeworfen wird, oder? Ohne dem Echo hatte ich das nämlich nicht, und dein Code stand halt nur einfach wieder in der Mail drin.

  • Eine eMail ist nicht nur Text. Und selbst wenn -> wenn Du die eMail via Webmail öffnest (eMails beim provider im Browser lesen), dann wird Code ausgeführt.
    (wobei ich denke, dass eMail-provider sicherlich dagegen vorbeugen)


    Oder Du öffnest die eMail im eMail-Programm (outlook ect). Dann kann auch HTML ect ausgeführt werden. Es sei denn das Programm ist so eingestellt, dass es nur text anzeigt (was ich noch nie in Default-Einstellungen gesehen habe).

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!