Frage

Dieses genommen von O'Reilly Lernen PHP, MySQL und Javascript :

function sanitizeString($var)
{
    $var = stripslashes($var);
    $var = htmlentities($var);
    $var = strip_tags($var);
    return $var;
}

function sanitizeMySQL($var)
{
    $var = sanitizeString($var);
    $var = mysql_real_escape_string($var);
    return $var;
}

Ist das alles, was man braucht für POST und GET Datenverarbeitung? In Anbetracht der Quelle, fürchte ich, dies ist für Anfänger verdummt und ich verlasse mich verletzlich später angreifen.

Danke.

War es hilfreich?

Lösung

Es ist nicht möglich, allgemein und unterschiedslos „sanieren“ eingehende Daten. Es kommt immer darauf an, was man damit tun will.

Das sanitizeString () Methode ist geeignet Inhalt aufzuräumen, dass man nicht vertrauen (beispielsweise von einer ungesicherten Form), die in der HTML-Ausgabe Ihrer Seite angezeigt werden soll. Nichts anderes. Es wird Informationen wie Tags entfernen, und es wird Sonderzeichen ändern.

Das sanitizeMySQL () Methode wird das tun, und macht es sicher in einer mySQL Abfrage zu verwenden. Auch dies ist nur dann sinnvoll, wenn Sie Eingabe auszuziehen Benutzer mögen beispiel für ein Gästebuch oder eine Shoutbox. Wenn Sie ein CMS mit autorisierten Benutzern hätten, würden Sie nicht tun wollen.

Unter keinen Umständen gilt dies immer auf alle eingehenden Variablen. Wenn Sie ein Bestellformular zum Beispiel haben, die Sie über E-Mail weitergeleitet wird, würde htmlspecialchars() alle Sonderzeichen in Einheiten umwandeln - die buchstäblich angezeigt (wie ") in einer Nur-Text-E-Mail. Sie würde nicht wollen, das zu tun.

Für einen allgemeinen Überblick darüber, was sanitäre Einrichtungen zu verwenden, wo ich denke, die ist eine gute Antwort. Außerdem, wenn Sie E-Mail basierend senden werden auf eingehende Daten Besuche Mail-Injektionen .

Andere Tipps

als vielmehr die alten MySQL-Treiber und mysql_real_escape_string arbeitet, verwenden Sie einen moderneren Treiber dass Stützen Prepared Statements (zB PDO ).

htmlentities konvertiert '<' und '>' in ihre entsprechenden HTML-Entitäten, so rufen strip_tags nach htmlentities wird keinen Einfluss hat.

stripslashes sollte nur aufgerufen werden, wenn Magic Quotes aktiviert sind (verwenden Sie get_magic_quotes_gpc und get_magic_quotes_runtime Test für diese).

Es gibt keine magischen Kugel-Funktion auf Benutzereingaben sicher zu machen, weil es völlig davon abhängig, was Sie damit machen. Zum Beispiel, wenn Sie ein Textfeld haben und verwenden Sie es mit der obigen Funktion wird es diese Zeichenfolge löschen:

javascript:someFunction()

, das ist kein Problem ... es sei denn, Sie dann die Benutzereingabe in einem Onclick-Attribut eines Links verwenden. Unwahrscheinlich? Sicher. Aber es ist Beweis von Gegenbeispiel.

Sie müssen verstehen, was Sie die Benutzereingabe verwenden für, was Schwachstellen es einführen könnte oder ausnutzt, und dann entsprechend handeln.

mysql_real_escape_string() reichen aus, um SQL-Injection zu stoppen, damit ist ein Kinderspiel. So stoppen XSS viel mehr nebulös ist.

Guter Start. Idealerweise für Dinge, die nicht Freiform sind, können Sie die Eingabe in einer switch-Anweisung (oder was auch immer) verwenden, um fest einprogrammierte Werte Nachschlag in die SQL zu gehen. Das hilft, die Dinge zu verhindern das vermisste Hygienisierung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top