什么是「;参数“;它们如何防止SQL注入?

什么是「;参数“;它们如何防止SQL注入?,sql,Sql,我很早就开始学习SQL,但是我遇到了SQL注入的主题,并且理解参数可能是防止它们的最好方法。但我找不到任何解释来解释它们到底是什么 例如,在ASP.NET中的这段代码中(来自w3schools): “command.parameters.addwithvalue”实际上是做什么的 如果这是一个愚蠢的问题,我很抱歉,但我找不到答案-我看的每一个地方,他们都说“使用参数”,但没有解释这到底意味着什么 谢谢 实际上,您需要准备好语句来停止sql注入,另一件事是您需要转义查询或在单引号之前添加斜杠,以避

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

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

“command.parameters.addwithvalue”实际上是做什么的

如果这是一个愚蠢的问题,我很抱歉,但我找不到答案-我看的每一个地方,他们都说“使用参数”,但没有解释这到底意味着什么


谢谢

实际上,您需要准备好语句来停止sql注入,另一件事是您需要转义查询或在单引号之前添加斜杠,以避免sql注入

中三学校

一些web开发人员使用单词或字符的“黑名单”来 在SQL输入中搜索,以防止SQL注入攻击

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

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

保护网站免受SQL注入攻击的唯一经验证的方法, 就是使用SQL参数

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

ASP.NET剃须刀示例

txtserid=getRequestString(“UserId”);txtSQL=“从用户选择* 其中UserId=@0“db.Execute(txtSQL,txtserid)

请注意,SQL语句中的参数由@ 马克

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


AddWithValue
是Ado.Net库中的一种方法。你可能想对这种方法做些研究。然后,它会引出其他内容,如参数集合。我还建议您在运行时运行代码并检查程序变量,看看您是否能够理解这一点。
txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0",txtUserID);
command.ExecuteReader();