Auf der Suche nach der Sicherheitslücke im Kontaktformular

Silke Schümann wrote this 19:49:

Ein sicheres PHP-Kontaktformular ist heutzutage unerlässlich. An und für sich, war ich der Meinung, ich hätte alles wesentliche ausgefiltert und anhand des Filters geblockt, auch die lästigen Spamversuche geblockt. Der folgende Posteingang, von vier meiner Kontaktformulare, verrät mir, dass ich noch nicht ganz angekommen bin.

Gesendet von: ½­Î÷æAÔ´

        ____________________________________________________________
        Email: y @ y12.com
        Name: ½­Î÷æAÔ´
        Telefonnummer: 0786820-78907568100687890
        Rückantwort:
        ____________________________________________________________

        Anfragetext:

        Erwuenschte Rueckantwort:
        ____________________________________________________________
  1. //Prüffunktion:
    function check_malicious($input) {
  2. $is_malicious = false;
  3. $bad_inputs = array("mime-version", "content-type", "cc:", "to:", "bcc:", "c", "t","o", ":", "#");
  4. foreach($bad_inputs as $bad_input) {
  5. if(strpos(strtolower($input), strtolower($bad_input)) !== false) {
  6. $is_malicious = true; break;
  7. }
  8. }
  9. return $is_malicious;
  10. }
  11. //Prüfung ausführen:
  12. if(check_malicious($namefield) || check_malicious($emailfield) || check_malicious($telfield) || check_malicious($anfragfield) || check_malicious($rueckfield) || check_malicious($siteemailxyz)) {
  13. $ok = false; $reason = 'malicious';
  14. }
  15. //Konsequenz bei Malicious:
    if($reason == 'malicious') {
  16. echo "<p>Entschuldigen Sie, leider ist Ihre Eingabe ung&uuml;ltig.</p> <p>Bitte die folgenden Bestandteile Ihrer Eingabe <br{$slash}>nicht verwenden oder verfremden:</p><ul><li>mime-version</li><li>content-type</li> <li>bcc:, cc:, to:</li></ul> <p>Herzlichen Dank.</p>";
  17. }
  18. else {... Prüfe übliche Fehleingaben nicht OK prüfe auf malicious und ob ok. Wenn alles ok, versende Formular ...}

Ich sehe allerdings noch nicht wie. Ich kann mir vorstellen, dass es eine Frage des Zeichensatzes ist. Da aber fehlt mir noch das Verständnis für diese Materie. Ich habe mir den Dr Web-Bausatz angesehen, aber der ist so umfangreich und lästig durchzusteigen, dass ich für das kleine Formularchen, um einfache Textmeldungen an mich zu versenden lieber nach andere Lösungen suche. Nur mit dem Wie bin ich noch nicht weiter. Erst einmal als schnell-Maßnahme werde ich die vier Formulare umtaufen und den Timestamp-Trick einbauen, so dass ein Hashwert, der vom Formular erzeigt wird und ein Zeitfenster zusätzlich Bedingungen werden für den erfolgreiche versand.

Mich wieder mit was Neuem in der php.net rumzuschlagen, wo mein Todo-Körbchen gut gefüllt ist, begeistert mich, gigantisch.

Und auf geht’s mhash() *urlgh* Erst Mal noch im Netz nach Vorbildern und Hilfe gegoogled. Update folgt. Hinweise werden gerne entgegen genommen.

Leave a Reply