2009-07-08 7 views
0

"Wir sollten niemals Benutzereingaben vertrauen", das ist, was ich irgendwo im Web gelesen habe.Was sind die Methoden, um Benutzereingaben zu überprüfen und die Injektion von MySQL zu verhindern?

Derzeit habe ich ein Webformular, sie geben ihren Benutzernamen und ihre E-Mails ein. Für Benutzernamen Feld, wie zu kontrollieren, zu prüfen und zu verhindern, mysql-Injektion? Derzeit ich dies in meinem PHP-Skript nur tun:

$username = mysql_real_escape_string($_POST['username']); // prevent mysql injection 

sehe ich einige Tutorials, bevor die mysql_real_escape_string Funktion, sie sind andere Funktionen wie, htmlentities, usw. (kann mich nicht erinnern, was es ist, und ich kann es nicht gefunden jetzt, seufz)

Ist das ein Muss, die so genannte "htmlentities" -Funktion vor mysql_real_escape_string ??

Was ist Ihre Methode, die Sie normalerweise verwenden, um Benutzereingabedaten zu überprüfen?

Oh ya, einige andere Funktionen:

stripslashes(); 
serialize(); 
urlencode(); 

muss ich die?

+0

Bitte suchen Sie bevor Sie eine neue Frage stellen. http://stackoverflow.com/search?q=sql+injection –

Antwort

11

Sie machen es richtig, was die Eingabe Ihrer Daten in die Datenbank angeht. Sie sind gegen SQL-Injection-Angriffe geschützt.

htmlentities() und htmlspecialchars() sind nicht relevant für SQL-Injection-Angriffe; Sie sind relevant für XSS Angriffe, was ein ganz anderes Thema ist, das Sie untersuchen sollten, und ist ein relevantes Problem, wenn Sie Benutzereingaben im Web anzeigen.

+0

Konnte es selbst nicht besser gesagt haben. http://en.wikipedia.org/wiki/Cross-site_scripting –

+0

was sind die anderen Attacken neben SQL-Injektion und XSS ?? wenn ich die htmlentities() und htmlspecialchars() einschließe wird es XSS-Angriffe verhindern ?? – jingleboy99

+0

Für andere Formen des Angriffs, sehen Sie diese Frage: http://stackoverflow.com/questions/438073/do-stackoverflow-users-agree-with-the-cwe-sans-top-25-most-dangerous-programming. htmlentities() und htmlspecialchars() sollten verwendet werden, wenn Sie eine Ausgabe erstellen, keine Eingaben erhalten und beide nicht gleichzeitig verwenden. Um viel Hoffnung zu haben, dass eine dieser Methoden Sie tatsächlich schützt, müssen Sie sie weniger als magische Rituale behandeln und mehr arbeiten, um zu verstehen, was sie tun, und warum und wie sie angewendet werden sollten. – chaos

1

wie @chaos sagte stimmt

Sie auch Datenbank-Abstraktionsschichten, wie gU verwenden können, die die Paramater entkommen wird für Sie

2

Sie auch mit prepared statements (ich glaube, das entspricht parametrisierte Abfragen aussehen könnte SQL Server), was die Angriffsfläche weiter reduziert.