ORM在哪里容易受到SQL注入攻击?

时间:2011-03-02 20:26:26

标签: nhibernate entity-framework orm sql-injection

当使用ORM(实体框架,LINQ to SQL,NHibernate ......)时,SQL注入攻击是否会受到设计的缓解?

如果没有,我应该在哪里进行额外的验证/清理,以防止出现漏洞?

4 个答案:

答案 0 :(得分:5)

大多数(如果不是全部)主流ORM使用参数化SQL,这将保护您免受直接SQL注入攻击。但是,应用程序层中的参数化SQL不会保护您免受潜在的SQL注入攻击。当除了ORM之外的某些内容直接连接SQL语句中的用户输入(例如连接用户输入以创建非参数化动态查询的批处理运行存储过程)时,会发生这些情况。请注意,这根本不是ORM问题,但我想我会提出这一点,指出参数化SQL只能保护您免受注入,如果它在任何地方使用,而不仅仅是在ORM中。

答案 1 :(得分:0)

他们使用参数化查询在NHibernate中。

答案 2 :(得分:-2)

ORM通常使用大量动态SQL,这是不安全的,因为它为应用程序和/或服务帐户的用户提供了执行临时SQL查询的能力。正确的解决方案是只有程序员和数据库管理员才能拥有DataReader / DataWriter,并且所有触及数据库的程序除了参数化的存储过程外什么都不使用,并且没有与程序关联的DataReader / DataWriter访问。他们只能访问我说他们可以使用的SP。只有数据库管理员和程序员才能执行临时SQL查询。

答案 3 :(得分:-3)

ORM在基本概念中被设计为安全的。大多数情况下你不必担心它,但如果你认为你可能会遇到真正的破解,你应该做一些自定义的调整。

对于简单的应用程序,您将涵盖简单的SQL注入。在安全和SQL注入问题上,没有任何机构(严肃地说,没有任何机构)会给你一个灵丹妙药。这是我的建议。