2014-10-27 30 views
1

我很早就学习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(); 

什么DOS下 “command.parameters.addwithvalue” 实际上呢?

对不起,如果这是一个愚蠢的问题,但我找不到它的答案 - 无论我看他们只是说“使用参数”,但没有解释实际上是什么意思...

谢谢!

+0

嗯...'AddWithValue'在Ado.Net库的方法,您可能想要做对方法的一些研究它,然后。我还建议你在运行时运行你的代码并检查程序变量,看看你是否可以理解它。 – 2014-10-27 04:43:24

回答

0

实际上你需要准备的语句停止SQL注入,另一件事是你需要逃避查询或以qvoid SQL注入

形式W3Schools的

“单引号前加上削减有些网页开发人员使用“黑名单”字或字符来搜索SQL输入,以防止SQL注入攻击。

这不是一个好主意,很多这样的词(如delete或 dro p)和字符(如分号和引号)以公共语言使用,应该允许在许多类型的输入中使用。

(其实应该是完全合法的输入在 数据库字段的SQL语句。)

,以防止SQL注入攻击一个网站的唯一行之有效的方法, 是使用SQL参数。

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

ASP.NET剃刀实施例

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

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

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