2010-03-25 9 views
7

Zwykła konfiguracja NHibernate, np. Bez płynnego NHibernate, bez HQL, nic oprócz obiektów domenowych i plików mapowania NHibernate. Załadować obiektów poprzez:Injekcja SQL z równiną-wanilią NHibernate

_lightSabers = session.CreateCriteria(typeof(LightSaber)).List<LightSaber>(); 

I stosuje surowe dane wprowadzone przez użytkownika bezpośrednio do jednej nieruchomości na "miecz świetlny" Klasa:

myLightSaber.NameTag = "Raw malicious text from user"; 

I wtedy ocalić miecz:

session.SaveOrUpdate(myLightSaber); 

Everything I "Widziałem, że tak, w tej sytuacji jesteś odporny na iniekcję SQL, ze względu na sposób parametryzacji NHibernate i ucieczki od zapytań pod maską. Jednak jestem również początkującym początkującym NHibernate, więc chciałem sprawdzić dwa razy.

Dzięki!

+0

Nie rozumiem części * siły sugestii * pod koniec. Czy to ma być żart? Nie rozumiem tego. –

+0

Tak, przepraszam. Typo z innej wersji Q. Usunięto. –

Odpowiedz

8

Tak, jesteś prawie odporny na wstrzyknięcia SQL podczas korzystania z NHibernate. Używa sparametryzowanych zapytań dla wszystkich wygenerowanych instrukcji SQL na wszystkich platformach, które je obsługują.

Można jednak obejść ten problem, używając niestandardowego kodu SQL do wstawiania/aktualizacji, lub wykonując SQL z odmianą execute_sql jakiegoś sortowania lub zapytań SQL bez parametrów.

3

Jesteś bezpieczny, dopóki nie dodajesz danych użytkownika bezpośrednio do HQL lub SQL: nic więcej (z funkcji hibernacji zapewnia) pozwoli użytkownikom na wstrzykiwanie złośliwego kodu.

2

Po prostu echo innych, jeśli pozwolisz NHibernate wygenerować swój SQL, jesteś bezpieczny, przynajmniej teoretycznie.

Należy jednak zachować ostrożność przy przechowywaniu procedur, wyzwalaczy i funkcji w bazie danych, szczególnie w przypadku dynamicznego SQL. Nawet jeśli klient używa wszędzie zapytań sparametryzowanych, wtrysk może być nadal możliwy.