【问题标题】:What are "parameters" and how do they prevent SQL injections? [duplicate]什么是“参数”以及它们如何防止 SQL 注入? [复制]
【发布时间】:2014-10-27 04:12:47
【问题描述】:

我很早就开始学习 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”实际上是做什么的?

如果这是一个愚蠢的问题,我很抱歉,但我找不到它的答案 - 无论我在哪里看到,他们都只是说“使用参数”,但没有解释这实际上意味着什么......

谢谢!

【问题讨论】:

  • 嗯...AddWithValue 是 Ado.Net 库中的一个方法。您可能想对该方法进行一些研究。然后它会导致其他事情,比如参数集合。我还建议您在运行时运行代码并检查程序变量,看看您是否能理解这一点。

标签: sql


【解决方案1】:

实际上你需要准备好语句来停止sql注入,另一件事是你需要对查询进行转义或在单引号前添加斜杠以qvoid SQL注入

形成 w3schools

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

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

(事实上,在 数据库字段。)

保护网站免受 SQL 注入攻击的唯一行之有效的方法, 是使用SQL参数。

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

ASP.NET Razor 示例

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2014-07-17
    • 2021-08-20
    相关资源
    最近更新 更多