2010-11-23 6 views
0

Ich baue eine Bewertungsseite, die es Benutzern ermöglicht, Bewertungen einzureichen, die in einer MySQL DB gespeichert werden. Bewertungen werden von mir manuell auf Inhalt überprüft und dann auf meiner Website angezeigt. Hier ist meine benutzerdefinierte Funktion für die Datenreinigung (jedes Element auf dem Formular an diese Funktion übergeben wird):Meinung zur Sicherheit meines Formulars senden/anzeigen

function cleanDataForDB($data) { 
$data = trim(htmlentities(strip_tags($data))); 

if (get_magic_quotes_gpc()) 
    $data = stripslashes($data); 

$data = mysql_real_escape_string($data); 

return $data; 

}

Ich habe das Drehbuch nicht geschrieben, um die Bewertungen angezeigt werden, sobald sie genehmigt haben Aber ich wollte nur alle Felder aus meiner MySQL-Tabelle über die Funktion html_entity_decode() übergeben und sie in den HTML-Code meiner Seite schreiben.

Wer sieht irgendwelche offensichtlichen Sicherheitslücken in diesem Plan? Es scheint mir ziemlich sicher zu sein, aber dies ist die erste Website, die ich erstellt habe, die von Benutzern eingereichte Daten erlaubt, also möchte ich sicher sein, dass ich mich nicht verwundbar mache.

Danke!

+0

Die Korrektur der magischen Zitate sollte einmal und an einem zentralen Ort erfolgen. Siehe Handbuch für etwas wie 'if (get_magic_quotes_gpc()) {$ _POST = array_map ("stripslashes", $ _POST); $ _GET ...} ' – mario

Antwort

1

Sie sollten die Daten auf der Datenbank entschlüsseln, bevor Sie sie in die Datenbank einfügen, und HTML beim Entnehmen des HTML-Codes ausführen. Auf diese Weise können Sie den HTML-Code in den Posts des Benutzers in Zukunft bearbeiten, ohne "hoppla, ich habe ihn kaputt" zu finden.

Der beste Weg, um die Daten für den Einsatz zu entkommen, ist die Verwendung von PDO.

Für die Anzeige der Daten reicht wahrscheinlich htmlentities aus.

+0

' htmlspecialchars' ist oft besser, aber auch * hängt * vom korrekten charset-Parameter ab, um effektiv zu sein. – mario

+0

Ich bin nicht vertraut mit PDO und das php.net Handbuch ist nicht sehr hilfreich zu dem Thema. Sie sagen, dass dies etwas ist, das ich zusätzlich zu der benutzerdefinierten Funktion verwenden sollte, die ich bereits verwende? Ich nehme an, PDO bietet irgendwie robustere Sicherheit? – Chris

+0

@Chris: Nicht dazu, sondern stattdessen. Informieren Sie sich über [vorbereitete Aussagen] (http://stackoverflow.com/search?q=%5Bphp%5D+prepared+statements) – mario

0

Ich stimme Borealid zu, möchte aber hinzufügen, dass Sie möglicherweise preg_replace() verwenden, um JavaScript-Scripting vollständig zu entfernen, anstatt nur die Tags zu entfernen.

+0

Ich fand ein paar Regexes, um dies zu tun (siehe Link), sollte aber nicht strip_tags() Mach das unnötig? (Übrigens, gibt es keine Wagenrückgabe in Kommentaren? sehr frustrierend für den Versuch, Code zu schreiben! :) LINK: http://www.phpfreaks.com/forums/php-regex/removing-javascript-from-string/ – Chris

Verwandte Themen