2012-04-06 13 views
5

Wie ich in vielen Artikeln lesen, wenn ich JPA/Hibernate Abfrage verwenden, ist es gut, Parameter in meine Abfragen so SQL-Injektion vermieden wird. Like:JPA-Abfrage - SQL-Injektion in Positionsparameter jpa native Abfrage

Mein Problem ist, dass in einigen Fällen muss ich native Abfrage verwenden, wenn ich meine Abfrage erstellen.

Ich werde meine Entity Manager und createNativeQuery verwenden. In diesem Fall sind die Parameter jedoch positionsabhängig. Wie:

select * from users where user_name = ? and user_surname = ? 

Dann in meiner Anfrage werde ich die Methode setParameter(1, "name") usw. verwenden, so ist dieser Fall „SQL-Injection-proof“ wie wenn in der parametrisierte Abfrage?

+1

Ja, die Parameter werden bei Verwendung der setParameter-Methode korrekt ignoriert, sodass sie nur als Daten verwendet werden. Die Sicherheitsanfälligkeiten für die Einfügung treten auf, wenn Sie die Zeichenfolgen unter Verwendung von Benutzerparametern selbst erstellen und nicht ordnungsgemäß entkommen. – kevingallagher

Antwort

4

wenn Sie String-Operationen nicht für den Aufbau Ihrer Abfrage wie

verwenden
"SELECT foo FROM bar Where id="+myParameter+" more sql ..." 

, dann haben Sie keine Sicherheitslücken.

1

Derzeit (Community korrigieren mich, wenn ich falsch liege) keine Sicherheitslücken innerhalb der neuesten PDO-Datenbank Abstraktionsschicht existieren.

Wenn Sie jedoch Ihre Abfragen nach bekannten und unbekannten Daten überprüfen, während Sie Eingaben bereinigen und filtern, wird die Möglichkeit einer Injektion im Falle eines Zero-Day-Exploits vermieden.

Ich verwende derzeit eine Kombination Eingabe von Filtern, charset Erwartungen, Stored Procedures und strenge Anforderungen an ihre Argumente vor jeder und alle erstellten Abfragen dynamisch

Verwandte Themen