普通的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的初学者,所以我想仔细检查一下.
谢谢!
是的,使用NHibernate时,几乎不受SQL注入的影响.它对支持这些的所有平台上的所有生成的SQL语句使用参数化查询.
但是,您可以通过使用自定义SQL进行插入/更新,或使用某种变体执行SQL execute_sql或不带参数的SQL查询来避免这种情况.