2011-01-05 17 views
10

Użyłem hibernacji do interakcji z moją bazą danych, teraz chciałem, aby moja warstwa bazy danych była zabezpieczona przed SQL Injection, więc zrobiłem trochę badań i odkryłem, że moje zapytania powinny być sparametryzowane, tak jak to znaczy, jeśli tylko uporządkować moje zapytania HQL jak:Zapobieganie iniekcji SQL w hibernacji

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

Potem nadszedł parametryzowane i chroniony przed SQL Injection, czy jest tam coś innego, co muszę zrobić ...

Jedna rzecz była mowa - "Zawsze uciekaj przed danymi "Jak można to osiągnąć?

Odpowiedz

4

Nie wiem o setString(), ale jeśli jest taki sam jak setParameter(), to tak, wystarczy to zrobić, aby zapobiec iniekcji sql.

Aktualizacja

uciekając danych, co oznacza, że ​​trzeba się upewnić, że nie są niebezpieczne przechowywania wartości w bazie danych.

Szybkie przykładem jest na przykład jeśli przechodzą w argumencie

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(); 

do zapytania, to następnym razem załadować to z bazy danych, a czynią to w swojej przeglądarce internetowej, będzie uruchomić skrypt .
Musisz upewnić się, że framework pomija wszystkie niedozwolone znaki, tj .: zmieniając < na &lt; przed wstawieniem go do bazy danych.
Jeśli twój framework tego nie robi, musisz to zrobić ręcznie. Istnieje mnóstwo bibliotek, które poprawnie ucieka kod dla Ciebie. Spójrz na przykład na this question i tam odpowiedzi.

+0

Sprawdziłem link, który zaproponowałeś .. ludzie sugerują rozwiązania dla html. Czy jest jakiś inny rodzaj ucieczki? –

+3

-1. Uciekanie danych wejściowych nie jest dobrym podejściem do zapobiegania XSS. Lepszym sposobem jest uniknięcie niezaufanych danych, gdy będziesz wstawiał je w niebezpiecznym kontekście (takim jak strona HTML), biorąc pod uwagę reguły tego kontekstu. Zobacz także [OWASP XSS Prevention Cheat Sheet] (http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet). Pytanie dotyczyło również iniekcji SQL, a nie XSS. – axtavt

+0

@axtavt Jeśli przeczytasz moją odpowiedź i komentarz wewnątrz kodu, zobaczysz, że wspominam, że dane muszą zostać usunięte po wstawieniu do tabeli Matki. –