当使用ORM(实体框架,LINQ to SQL,NHibernate ......)时,SQL注入攻击是否会受到设计的缓解?
如果没有,我应该在哪里进行额外的验证/清理,以防止出现漏洞?
答案 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注入问题上,没有任何机构(严肃地说,没有任何机构)会给你一个灵丹妙药。这是我的建议。