我很早就开始学习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;使用参数"但不能解释这实际意味着什么......
谢谢!
答案 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);“