【问题标题】:What is an example of an ORM query that causes SQL Injections and one that does not?什么是导致 SQL 注入的 ORM 查询示例和一个不会导致 SQL 注入的示例?
【发布时间】:2013-12-07 03:26:40
【问题描述】:

这个答案描述了how an ORM doesn't protect me from SQL injections,但我并不完全清楚我将如何“做错事”与“做正确的事”。

有人可以在 EntityFramework 或 Telerik OpenAccess 中提供有关如何完成和缓解 SQL 注入的示例吗?

【问题讨论】:

  • ORM 的概念不一定会让你失望,如果 ORM 有漏洞,那就是问题所在。至少,这是我收集到的。与任何其他框架、库或整个应用程序相同。

标签: sql-server entity-framework security sql-injection telerik-open-access


【解决方案1】:

任何成熟的 ORM 都不会存在 sql 注入漏洞只要您通过对象模型进行通信。因此,如果您有一个执行的方法(使用实体框架)

dbContext.Companies.Where(c => c.Name == someParameterFromUI)

用户可以输入"'x'; drop table Users;" 之类的搜索参数,但查询引擎会将查询参数化,唯一的结果是找不到任何公司(除非某些公司在创造自己的名字时是一桩笑声)。

但是..

任何成熟的 ORM 都会有它的后门,如果你坚持的话,你可以通过这些后门编写易受攻击的代码。 NHibernate 和 EF(我不知道 OpenAccess)提供了将原始 SQL 查询发送到数据库的方法。因此,您可以根据需要随意使用它们。不过,我宁愿说,这样做你不再使用 ORM。您只是在使用 ORM 工具在用户友好的 API 中友好地公开的数据库连接。

【讨论】:

    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2014-04-12
    • 2014-11-06
    • 2018-06-25
    • 2014-08-26
    • 2017-05-28
    相关资源
    最近更新 更多