Bertha: Sicherheit bei Usereingaben

Hallo zusammen,
ich bin noch nicht so lange bei PHP und habe daher ein oder zwei Fragen.
Wenn ich eine Usereingabe erwarte benutze ich mysql_real_escape_string bevor ich die Eingabe in die DB puste. Wie sieht es aus, wenn checkboxen oder Radiobuttons übergeben werden? Ist es notwendig auch diese Daten zu validieren bzw. zu prüfen? Was könnte mir schlimmstenfalls passieren, wenn ich diesen Daten blind vertraue? Wie könnte jemand sowas ausnutzen um Schaden anzurichten?

  1. Moin,

    Wenn ich eine Usereingabe erwarte benutze ich mysql_real_escape_string bevor ich die Eingabe in die DB puste. Wie sieht es aus, wenn checkboxen oder Radiobuttons übergeben werden?

    Auf jeden Fall solltest Du eine Kontrollstruktur bauen, mit welcher Du sicherstellst, dass ausschließlich nur von Dir erlaubte Parameter im URI vom Script verarbeitet werden.

    Und wenn die Menge der zu erwarteten Values auf bestimmte Parameter begrenzt ist, solltest Du auch die Values auf Gültigkeit prüfen.

    roro

  2. hi,

    Wenn ich eine Usereingabe erwarte benutze ich mysql_real_escape_string bevor ich die Eingabe in die DB puste. Wie sieht es aus, wenn checkboxen oder Radiobuttons übergeben werden? Ist es notwendig auch diese Daten zu validieren bzw. zu prüfen?

    Natürlich.
    Schliesslich wird für angekreuzte Checkboxen/Radiobuttons ein name=value-Paar übergeben, wie bei anderen Formularfeldern auch.

    Was könnte mir schlimmstenfalls passieren, wenn ich diesen Daten blind vertraue? Wie könnte jemand sowas ausnutzen um Schaden anzurichten?

    Er könnte die Daten genauso manipulieren, wie _jegliches_ andere Datum, welches du von ihm im Request übermittelt bekommst auch.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hallo Bertha,

    Wenn ich eine Usereingabe erwarte benutze ich mysql_real_escape_string bevor ich die Eingabe in die DB puste. Wie sieht es aus, wenn checkboxen oder Radiobuttons übergeben werden? Ist es notwendig auch diese Daten zu validieren bzw. zu prüfen? Was könnte mir schlimmstenfalls passieren, wenn ich diesen Daten blind vertraue? Wie könnte jemand sowas ausnutzen um Schaden anzurichten?

    Kommt drauf an™. Wenn du die übergebenen Daten in der Datenbank speicherst, musst du sie escapen. Bei Checkboxen (nicht bei Radiobuttons) reicht es, wenn du überprüfst, ob der Wert existiert (bei einer angeklickten Checkbox wird name=on gesendet, bei nicht angeklickt nix). Bei Radiobuttons solltest du nur die möglichen Werte akzeptieren. Die sauberste Lösung dabei ist IMHO, in der Datenbank den Datentyp ENUM zu verwenden.

    Grüße aus Freiburg,
    Marian

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->