什么是导致SQL注入的ORM查询的示例,而不是?

时间:2013-12-07 03:26:40

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

这个答案描述了how an ORM doesn't protect me from SQL injections,但是我并不完全清楚我会如何“做错事”而不是“做对”。

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

1 个答案:

答案 0 :(得分:2)

只要您通过对象模型进行通信,任何成熟的ORM都将没有SQL注入漏洞。因此,如果您有一个执行

的方法(使用实体框架)
dbContext.Companies.Where(c => c.Name == someParameterFromUI)

用户可以输入搜索参数,例如"'x'; drop table Users;",但查询引擎会对查询进行参数化,唯一的结果就是找不到任何公司(除非某些公司在创造名字时笑了起来)。

但是...

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