2015-03-31 84 views
0

大家好我目前在ASP.NET中使用查询生成器来创建选择,插入,更新查询等等,我已经在我的App_Code文件夹中创建的一些数据集。我已经意识到你要在查询中使用参数,你必须使用“?”像这样查询生成器是否阻止SQL注入?

SELECT * FROM users WHERE email = ? 

什么,我想知道是,这实际上保护你的表从SQL注入或做你需要做更多的代码,以保护查询?

回答

2

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

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注入是安全的。

+0

嗨尼克感谢您的回复,但你的建议似乎并没有工作:(但我的方式,我的查询是仍然可以SQL注入? – 2015-03-31 14:21:43

+0

你可以澄清你的意思是“似乎没有工作“? – 2015-03-31 14:34:53

+0

我设置了查询就像你有,如果不返回任何东西,当我创建它我得到一个警告,告诉我语法无效 – 2015-03-31 14:36:13