使用Plain-Vanilla NHibernate进行SQL注入

7 nhibernate sql-injection

普通的NHibernate设置,例如,没有流畅的NHibernate,没有HQL,除了域对象和NHibernate映射文件之外什么也没有.我通过以下方式加载对

_lightSabers = session.CreateCriteria(typeof(LightSaber)).List<LightSaber>();
Run Code Online (Sandbox Code Playgroud)

我将原始用户输入直接应用于"LightSaber"类的一个属性:

myLightSaber.NameTag = "Raw malicious text from user";
Run Code Online (Sandbox Code Playgroud)

然后我保存LightSaber:

session.SaveOrUpdate(myLightSaber);
Run Code Online (Sandbox Code Playgroud)

我所看到的一切都说是的,在这种情况下你不受SQL注入的影响,因为NHibernate参数化和逃避查询的方式.但是,我也是NHibernate的初学者,所以我想仔细检查一下.

谢谢!

Ant*_*lev 9

是的,使用NHibernate时,几乎不受SQL注入的影响.它对支持这些的所有平台上的所有生成的SQL语句使用参数化查询.

但是,您可以通过使用自定义SQL进行插入/更新,或使用某种变体执行SQL execute_sql或不带参数的SQL查询来避免这种情况.