这个答案描述了how an ORM doesn't protect me from SQL injections,但是我并不完全清楚我会如何“做错事”而不是“做对”。
有人可以在EntityFramework或Telerik OpenAccess中提供有关如何完成和注释SQL注入的示例吗?
答案 0 :(得分:2)
只要您通过对象模型进行通信,任何成熟的ORM都将没有SQL注入漏洞。因此,如果您有一个执行
的方法(使用实体框架)dbContext.Companies.Where(c => c.Name == someParameterFromUI)
用户可以输入搜索参数,例如"'x'; drop table Users;"
,但查询引擎会对查询进行参数化,唯一的结果就是找不到任何公司(除非某些公司在创造名字时笑了起来)。
但是...
任何成熟的ORM都有它的后门,如果你坚持的话,你可以通过它来编写易受攻击的代码。 NHibernate和EF(我不知道OpenAccess)提供了将原始SQL查询发送到数据库的方法。所以你可以根据需要使用它们不安全。我宁愿说,这样做你不再使用ORM了。您只是使用ORM工具在用户友好的API中公开的数据库连接。