使用 Plain-Vanilla NHibernate 进行 SQL 注入
普通 NHibernate 设置,例如,没有流畅的 NHibernate,没有 HQL,除了域对象和 NHibernate 映射文件之外什么都没有。我通过以下方式加载对象:
_lightSabers = session.CreateCriteria(typeof(LightSaber)).List<LightSaber>();
我将原始用户输入直接应用到“LightSaber”类的一个属性:
myLightSaber.NameTag = "Raw malicious text from user";
然后我保存 LightSaber:
session.SaveOrUpdate(myLightSaber);
我所看到的一切都表明,是的,在这种情况下,您不会受到 SQL 注入的影响,因为这种方式NHibernate 参数化并转义底层的查询。然而,我也是一个相对 NHibernate 初学者,所以我想仔细检查一下。
谢谢!
Plain-vanilla NHibernate setup, eg, no fluent NHibernate, no HQL, nothing except domain objects and NHibernate mapping files. I load objects via:
_lightSabers = session.CreateCriteria(typeof(LightSaber)).List<LightSaber>();
I apply raw user input directly to one property on the "LightSaber" class:
myLightSaber.NameTag = "Raw malicious text from user";
I then save the LightSaber:
session.SaveOrUpdate(myLightSaber);
Everything I've seen says that yes, under this situation you are immune to SQL injection, because of the way NHibernate parameterizes and escapes the queries under the hood. However, I'm also a relative NHibernate beginner so I wanted to double-check.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,使用 NHibernate 时您几乎不会受到 SQL 注入的影响。它对支持这些语句的所有平台上的所有生成的 SQL 语句使用参数化查询。
但是,您可以通过使用自定义 SQL 进行插入/更新,或者使用某种
execute_sql
变体执行 SQL,或者不带参数的 SQL 查询来规避此问题。Yes, you're almost immune to SQL injection when using NHibernate. It uses parameterized queries for all generated SQL statements on all platforms that support these.
You can, however, circumvent this by using custom SQL for insertions/updates, or by executing SQL with a variation of
execute_sql
of some sort, or SQL Queries without parameters.只要您不将用户输入直接插入 HQL 或 SQL,您就是安全的:(hibernate 提供的功能)其他任何东西都不会允许用户注入恶意代码。
You're safe as long as you don't plug user input directly into HQL or SQL: nothing else (of the functionality hibernate provides) will allow users to inject malicious code.
只是为了回应其他人,如果你让 NHibernate 生成你的 SQL,你是安全的,至少在理论上是这样。
但是,您仍然需要小心数据库中的存储过程、触发器和函数,尤其是动态 SQL。即使客户端在任何地方都使用参数化查询,注入仍然是可能的。
Just to echo others, if you let NHibernate generate your SQL you're safe, at least in theory.
However, you still need to be careful with stored procedures, triggers, and functions in the database particularly with dynamic SQL. Even though the client uses parametrized queries everywhere, injection may still possible.