0

这个答案描述了 ORM 如何不能保护我免受 SQL 注入,但是我并不完全清楚我将如何“做错事”与“做正确的事”。

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

4

1 回答 1

2

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

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

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

但..

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

于 2013-12-07T23:58:44.767 回答