什么是“参数”以及它们如何阻止SQL注入?

时间:2014-10-27 04:12:48

标签: sql

我很早就开始学习SQL,但我遇到了SQL注入的主题,并且理解参数可能是防止它们的最佳方法。但我无法找到他们实际上是什么的任何解释。

因此,例如,在ASP.NET的这段代码中(来自w3schools):

txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0",txtUserID);
command.ExecuteReader();

" command.parameters.addwithvalue"实际上呢?

我很抱歉,如果这是一个愚蠢的问题,但我无法找到答案 - 我看到他们只是说'#34;使用参数"但不能解释这实际意味着什么......

谢谢!

1 个答案:

答案 0 :(得分:0)

实际上你需要做一个准备好的语句来停止sql注入,另外一件事就是你需要在单引号之前转义查询或者添加斜线以便qvoid SQL注入

表格w3schools

  

“一些网络开发者使用”黑名单“中的单词或字符   在SQL输入中搜索,以防止SQL注入攻击。

     

这不是一个好主意。许多这些词(如删除或   使用drop)和字符(如分号和引号)   用通用语言,应该允许多种类型的输入。

     

(实际上,输入一个SQL语句应该是完全合法的   数据库字段。)

     

保护网站免受SQL注入攻击的唯一可靠方法,   是使用SQL参数。

     

SQL参数是在执行时添加到SQL查询的值   时间,以受控的方式。

     

ASP.NET Razor示例

     

txtUserId = getRequestString(“UserId”); txtSQL =“SELECT * FROM Users   WHERE UserId = @ 0“; db.Execute(txtSQL,txtUserId);

     

请注意,参数在SQL语句中由@表示   标记

     

SQL引擎检查每个参数以确保它是正确的   它的列和字面处理,而不是SQL的一部分   执行。另一个例子txtNam = getRequestString(“CustomerName”);   txtAdd = getRequestString(“Address”); txtCit =   getRequestString( “城市”); txtSQL =“插入客户   (客户名称,地址,城市)值(@ 0,@ 1,@ 2)“;   db.Execute(txtSQL,txtNam,txtAdd,txtCit);“