LINQ-To-SQL 如何防止 SQL 注入
本文关键字:注入 SQL 何防止 LINQ-To-SQL | 更新日期: 2023-09-27 17:56:15
我目前正在做一个用C#和LINQ-TO-SQL的项目。这个项目将安全性作为重中之重,所以显然我想防止SQL注入。我用谷歌搜索了这件事,但它没有找到任何有用的东西。Microsoft自己的常见问题解答告诉我,由于 LINQ 处理参数的方式,注入不会有问题,但是看到 LINQ 在调试器中生成的代码并阅读了一些关于 LINQ-To-SQL 如何构建到 SQL 的信息,我不确定这如何应用。
有没有人有任何文献/联系来处理这个问题?
Linq to SQL 会自动使用 SQLParameter。用户输入被转换为参数值,而不仅仅是一个串联的字符串(这是允许SQL注入的原因)。这种情况发生在服务器端,IIRC,所以你可能只看到客户端代码。如果您想了解更多背景和信息,可以在此处阅读信息。
这很简单,真的 - 翻译从不注入变量而不参数化它们; 所以:
var orders = from ord in ctx.Orders
where ord.CustomerName = name
select ord;
将成为:
SELECT * FROM [dbo].[Orders] WHERE [CustomerName] = @p0
其中p0
是一个参数,其值取自捕获的name
仅此而已,仅此而已。但这避免了注射攻击。与不正确的意外形成对比:
var sql = "SELECT * FROM [dbo].[Orders] WHERE [CustomerName] = '" + name + "'";
这带来了巨大的风险。当然,您也可以正确参数化上述内容:
var sql = "SELECT * FROM [dbo].[Orders] WHERE [CustomerName] = @name";
(并添加一个参数@name
,其值来自name
)
它使用参数化查询。 http://www.devx.com/dotnet/Article/34653/1954