使用 Plain-Vanilla NHibernate 进行 SQL 注入

发布于 2024-08-26 17:33:21 字数 537 浏览 10 评论 0原文

普通 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

尐偏执 2024-09-02 17:33:21

是的,使用 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.

就像说晚安 2024-09-02 17:33:21

只要您不将用户输入直接插入 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.

无敌元气妹 2024-09-02 17:33:21

只是为了回应其他人,如果你让 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文