sql注入攻击

时间:2011-11-19 16:27:13

标签: asp.net sql-injection

我有一个asp.net网站...最后几天,我在日志中看到我被sql注入攻击,如:

Exceptia: Error Caught in Application_Error event Error in: http://gramma.ro/Site/DetaliiProdus.aspx?c=m1&p=1465&s1=45&s2=79/**/or/**/1=@@version))--

当然这会引发异常,因为我在执行任何sql查询之前检查参数:

Error Message:Input string was not in a correct format.

对于所有这些异常,我将用户重定向到特定的错误页面。

当然,这些攻击现在对我没有影响(我正在使用参数化的sql命令),但我正在使用ips将它们放入 IIS - IP地址和域限制中,以便ip不再可以访问我的网站。

我的问题:我还能做些什么吗?似乎这个恶意用户,即使我阻止他的ip,也会从另一个ip尝试同样的攻击(我在过去3天内阻止了大约6个ips,这非常难看......)。你能提出我应该做的其他事吗?

更新:所有这些攻击都会使/**/or/**/1=@@version而不是查询参数值,因此我非常确定攻击不是来自用户的随机问题,而是真正的SQL注入攻击。问题是这些ips来自不同的地方,因此我无法向一些互联网提供商或托管公司报告......

2 个答案:

答案 0 :(得分:2)

这将针对您展示的单个请求提供保护。要正确防止SQL注入,请尽可能参数化所有查询,验证用户输入参数。

在我的代码中,我实际上更进一步,在任何意外的查询字符串上抛出异常,这使得API发现(这就是这种攻击)更加困难。

将此添加到global.asax

void Application_BeginRequest(object sender, EventArgs e)
{
    if(HttpContext.Current.Request.Url.ToString().Contains("@@version"))
    {
        throw new HttpException(400,"Bad Request");
    }
}

答案 1 :(得分:0)

将存储过程用于您的应用程序。这样就可以防止SQL注入。因为存储过程只接受开发人员描述的有限参数。

相关问题