Asp.net 此LINQ语句易受SQL注入攻击吗?
此LINQ语句易受SQL注入攻击吗Asp.net 此LINQ语句易受SQL注入攻击吗?,asp.net,linq-to-sql,linq-to-entities,Asp.net,Linq To Sql,Linq To Entities,此LINQ语句易受SQL注入攻击吗 var result = from b in context.tests where b.id == inputTextBox.Text select b; 其中,上下文是一个实体,测试是一个表。 我正在尝试学习LINQ,我认为它的好处是它不易受到sql注入的攻击,但我看到的一些东西有不同的说法。我需要参数化这个LINQ语句以使它更安全吗?如果是,怎么做 这也会被认为是linq to sql还是linq to entities?否。linq
var result = from b in context.tests
where b.id == inputTextBox.Text
select b;
其中,上下文是一个实体,测试是一个表。
我正在尝试学习LINQ,我认为它的好处是它不易受到sql注入的攻击,但我看到的一些东西有不同的说法。我需要参数化这个LINQ语句以使它更安全吗?如果是,怎么做
这也会被认为是linq to sql还是linq to entities?否。linq to entities和linq to sql处理sql查询的生成,以避免sql注入。如果您想了解在使用各种输入运行此查询时生成的SQL语句,可以使用LINQPad 是LINQ to SQL还是LINQ to Entities取决于
上下文
对象是什么,不能从这个代码片段中确定
在LINQ中,唯一需要担心SQL注入的时候是使用ExecuteQuery方法运行自定义SQL查询()。但此时,您已经离开了语言集成查询,回到了生成自己字符串的世界。LINQ使用参数化查询,因此通常不易受SQL注入的影响。例如,您的示例不易受攻击。LINQ to Entities提供程序使用参数化查询,并且对SQL注入完全安全。LINQ to SQL生成参数化查询,因此它可以防止SQL注入攻击。简短回答:LINQ不易受SQL注入攻击。 长答案: LINQ不像SQL。在后台有一个完整的库,它从编译器根据代码生成的表达式树中构建SQL,将结果映射到对象,当然它还负责确保过程中的安全 见: 如何保护LINQ到SQL免受攻击 SQL注入攻击 A.SQL注入一直是传统SQL的一个重大风险 通过连接用户 输入。LINQtoSQL避免了这种情况 在中使用SqlParameter进行注入 查询。用户输入被转换为 参数值。这种方法 防止恶意命令被删除 从客户输入中使用 在内部,这意味着当LINQ to SQL查询数据库时,它将不使用普通值,而是将它们作为SQL参数传递,这意味着数据库永远不能将它们视为可执行代码。对于大多数(如果不是全部的话)ORM映射程序来说也是如此 比较这两种方法(完全是伪代码): 我建议您深入研究LINQ语句的实际含义,以及它们何时以及如何转换为真正的SQL。你可能想了解LINQ等等。就LINQ而言,与任何抽象技术一样,了解幕后发生的事情既有趣又非常有用 另外,每次我看到一个关于SQL注入的问题,我都会忍不住想起这个网络喜剧
Linq将所有查询参数化,因此不易受到SQL注入攻击。但是,您仍然应该验证所有用户输入,否则您将面临跨站点脚本攻击。但是,如果您使用Linq连接字符串和输入,您可能仍然容易受到攻击。谢谢。顺便说一句,xkcd是惊人的。我认为LINQ是在参数化查询,但我不能100%确定我是否正确/安全地使用了LINQ。虽然我同意应该验证用户输入,但我看不出跨站点脚本攻击与此有什么关系。这取决于实际对数据做了什么,如果您直接从数据库中显示数据,任何自定义脚本都将/可能被执行。哦,那么您指的是在浏览器中显示用户输入的文本时不转义HTML,对吗?这不是我要归类为验证用户输入的内容,但我明白你的意思。
string name = "' ; DROP DATABASE master --"
run ("SELECT * FROM Authors WHERE Name = '" + name + "'") // oops!
// now we'd better use parameters
SqlParameter name = new SqlParameter ("@name", "' ; DROP DATABASE master --")
run ("SELECT * FROM Authors WHERE Name = @name", name) // this is pretty safe