大家好,我目前正在 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/