2012-04-06 12 views
5

Jak czytałem w wielu artykułach, kiedy używam kwerendy JPA/Hibernate, dobrze jest ustawić parametry w moich zapytaniach, aby uniknąć iniekcji SQL. Podobnie jak:Kwerenda JPA - iniekcja sql w parametrach pozycyjnych jpa natywne zapytanie

select user from User user where user.name = :name and user.surname = :surname 

Mój problem polega na tym, że w niektórych przypadkach potrzebuję użyć zapytania natywnego podczas tworzenia zapytania.

Będę używać mojego menedżera podmiotu i createNativeQuery. Ale w tym przypadku parametry będą pozycyjne. Jak:

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

Wtedy w mojej kwerendy I użyje metody setParameter(1, "name") itd. Więc jest to przypadek „SQL injection dowód” jak wtedy, gdy w zapytaniu parametryzowanego?

+1

Tak, będzie poprawnie wymykała się parametrom podczas korzystania z metody setParameter tak, aby była używana tylko jako dane. Luki iniekcyjne pojawiają się podczas budowania łańcuchów przy użyciu parametrów dostarczanych przez użytkownika i nie ucieka prawidłowo. – kevingallagher

Odpowiedz

4

jeśli nie używać operacji ciąg budowania zapytanie jak

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

, wtedy nie będziesz mieć żadnych słabych punktów.

1

Obecnie (społeczność poprawi mnie, jeśli się mylę) nie ma żadnych luk w najnowszej warstwie abstrakcji bazy danych PDO.

Jednak testowanie zapytań dotyczących znanych i nieznanych elementów podczas odkażania i filtrowania danych wejściowych pomoże wyeliminować możliwość zastrzyku w przypadku exploita zero-day.

Obecnie używać kombinacji filtrując wejście oczekiwania charset, procedury przechowywane i surowe wymagania na swoich argumentów przed wszelkich dynamicznie tworzone zapytań