2011-01-05 5 views
10

Ich habe Hibernate verwendet, um mit meiner Datenbank zu interagieren, jetzt wollte ich meine Datenbank-Schicht gegen SQL-Injection sichern, also habe ich einige Nachforschungen und ich fand heraus, dass meine Abfragen parametrisiert werden sollten es bedeuten, wenn ich meine HQL-Abfragen strukturieren wie:Vorbeugung gegen SQL-Injektion in Hibernate

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?") 
.setString(0, name) 
.list(); 

Dann ist es parametrisiert und von SQL-Injection geschützt, oder gibt es etwas anderes, was ich tun muss ...

Eine andere Sache erwähnt wurde - "Immer entkommen Sie Ihre Daten "Wie kann das erreicht werden?

Antwort

4

Ich weiß nicht über setString() aber wenn es das gleiche ist wie setParameter() dann ja, es ist genug, das zu tun, um sql Injektion zu verhindern.

aktualisieren

von Daten zu entkommen, bedeutet, dass Sie sicher, müssen Sie gefährliche Werte nicht in der Datenbank zu speichern sind.

Ein kurzes Beispiel ist zum Beispiel, wenn Sie in dem Argumente

String name = "<script>alert('Hello');</script>"; 
//insert this name into Mother, and then when you load it from the database, it will be displayed  

List mothers = session.createQuery(
"select mother from Cat as cat join cat.mother as mother where cat.name = ?") 
.setString(0, name) 
.list(); 

auf Ihre Anfrage passieren, dann sind Sie beim nächsten Mal dieses aus der Datenbank laden, und machen es in Ihrem Web-Browser, wird es das Skript ausführen .
Sie müssen sicherstellen, dass Ihr Framework alle ungültigen Zeichen entfernt, dh: Ändern Sie < in &lt;, bevor Sie es in die Datenbank einfügen.
Wenn Ihr Framework dies nicht tut, müssen Sie es manuell tun. Es gibt Tonnen von Bibliotheken da draußen, die Code für Sie korrekt entkommt. Schauen Sie sich zum Beispiel this question an und die Antworten dort.

+0

Ich schaute in den Link, den Sie vorgeschlagen .. Leute schlagen Lösungen für HTML-Entweichen vor .. Gibt es irgendeine andere Art von Flucht erforderlich ?? –

+3

-1. Es ist kein guter Ansatz, die Eingabedaten zu umgehen, um XSS zu verhindern. Der bessere Weg besteht darin, die nicht vertrauenswürdigen Daten zu maskieren, wenn Sie sie in einen gefährlichen Kontext (z. B. eine HTML-Seite) einfügen, wobei Sie die Regeln dieses Kontexts berücksichtigen. Siehe auch [OWASP XSS Prevention Cheat Sheet] (http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet). Auch ging es um SQL-Injection, nicht um XSS. – axtavt

+0

@axtavt Wenn Sie meine Antwort und Kommentar im Code lesen, werden Sie sehen, dass die Daten beim Einfügen in die Tabelle Mutter entgangen sein müssen. –