有关URL中将用作存储过程参数的参数的安全性问题

时间:2013-05-02 12:48:05

标签: sql security

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

例如,用户使用网址发出请求:

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

该参数用于存储过程,如下所示:

  • SELECT * FROM @Code

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

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

你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

不要试图消毒输入;改为使用参数化查询。

例如,假设C#:

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand("SELECT * FROM Table WHERE Code = @Code", connection))
{
    command.Parameters.AddWithValue("@Code", code);
    ...
}