0

有一个 Web 服务,它公开了一个名为 A() 的函数。用户可以通过参数向该方法发出请求。并且该参数用作存储过程的输入。

例如,用户使用 url 发出请求:

  • 本地主机/WS?代码=你好

并且该参数在这样的存储过程中使用:

  • 从@代码中选择 *

但是,该代码有一个安全漏洞,因为方法 A() 不会过滤 Code 变量中的任何危险字符。它必须清理输入。

在这种情况下,我该如何清理输入?我目前只是删除了一些字符,但我不确定代码是否真的删除了任何 SQL 注入的可能性。

你有什么想法?

4

1 回答 1

1

不要试图清理输入;改用参数化查询。

例如,假设 C#:

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("SELECT * FROM Table WHERE Code = @Code", connection))
{
    command.Parameters.AddWithValue("@Code", code);
    ...
}
于 2013-05-02T13:51:46.723 回答