c# - 查询生成器是否可以防止 SQL 注入(inject)?

标签 c# mysql asp.net visual-studio-2010 ms-access

大家好,我目前正在 ASP.NET 中使用查询生成器在我在 App_Code 文件夹中创建的一些数据集上创建选择、插入、更新查询等。我意识到要在查询中使用参数,您必须使用“?”像这样

SELECT * FROM users WHERE email = ?

我想知道的是,这是否真的可以保护您的表免受 SQL 注入(inject),或者您是否需要在代码中执行更多操作以保护查询?

最佳答案

参数化查询接受参数并将它们作为适当的 SQL 数据类型输入。例如创建这个过程

CREATE PROCEDURE GetStudent (IN LN VARCHAR(200))
  BEGIN
    SELECT Name FROM Students WHERE LastName = LN;
  END

并传递此值(假设这是在您的 C# 代码中。

"'Bobby'; DROP TABLE STUDENTS;"

本质上会执行这个查询

SELECT Name FROM Students WHERE LastName ='''Bobby;''DROP TABLE Students'

这是相当安全的。

当然,您必须适应您的特定应用程序需求,但总的一点是,对于所有主要 RDMS,参数化查询对于 SQL 注入(inject)都是安全的。

关于c# - 查询生成器是否可以防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29369032/

相关文章:

c# - ASP.NET 从 VStudio 发送电子邮件运行速度很快,但在 IIS 中运行速度很慢

c# - Databind 无法通过 IBindableComponent 进行转换

mysql - 奇怪的(未知)MySql 行为

Mysql 查找另一个值后面的值

asp.net - Azure 云似乎不可靠或者应用程序 StockTrader 有问题?

c# - Crystal Reports,为什么在我提供了详细信息后仍要求数据库登录?

c# - 是否可以使用 Obsolete 属性标记 .net 函数

php - 匹配字段中的序列化值

asp.net - MVC JSON 操作返回 bool

ASP.net MVC - 在区域之间共享部分