2010-03-25 6 views
7

Normales NHibernate-Setup, z. B. kein flüssiger NHibernate, kein HQL, nichts außer Domänenobjekte und NHibernate Mapping-Dateien. Ich lade Objekte über:SQL Injection mit Plain-Vanilla NHibernate

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

I roh Benutzereingabe wenden sich direkt an eine Eigenschaft auf der "Lightsaber" Klasse:

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

ich das Licht dann sparen:

session.SaveOrUpdate(myLightSaber); 

Alles, was ich Habe gesehen, dass ja, in dieser Situation sind Sie gegen SQL-Injection immun, weil NHibernate die Abfragen unter der Haube parametrisiert und entkommt. Allerdings bin ich auch ein relativ NHibernate Anfänger, also wollte ich das nochmal überprüfen.

Danke!

+0

Ich verstehe nicht den * Kraftvorschlag * Teil gegen Ende. Soll das ein Witz sein? Ich verstehe es nicht. –

+0

Ja - tut mir leid. Typo aus einer anderen Version von Q. Entfernt. –

Antwort

8

Ja, Sie sind fast immun gegen SQL-Injektion, wenn Sie NHibernate verwenden. Es verwendet parametrisierte Abfragen für alle generierten SQL-Anweisungen auf allen Plattformen, die diese unterstützen.

Sie können dies jedoch umgehen, indem Sie benutzerdefiniertes SQL für Einfügungen/Aktualisierungen verwenden oder SQL mit einer Variation von execute_sql oder SQL-Abfragen ohne Parameter ausführen.

3

Sie sind sicher, solange Sie nicht Benutzereingaben direkt in HQL oder SQL stecken: nichts anderes (von der Funktionalität Hibernate bietet) können Benutzer schädlichen Code injizieren.

2

Nur um anderen zu antworten, wenn Sie NHibernate Ihr SQL generieren lassen, sind Sie zumindest in der Theorie sicher.

Sie müssen jedoch vorsichtig mit gespeicherten Prozeduren, Triggern und Funktionen in der Datenbank insbesondere mit dynamischem SQL umgehen. Obwohl der Client überall parametrisierte Abfragen verwendet, ist die Injektion möglicherweise noch möglich.