2011-11-19 134 views
4

我有一个asp.net网站...最后几天,我在日志中看到我被攻击与SQL注入这样的: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/**/[email protected]@version))-- 

当然会抛出一个异常,因为我做任何SQL查询之前检查参数:

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

对于这一切我的异常将用户重定向到一个特定的错误页面。当然,这些攻击现在不会影响我(我正在使用参数化的sql命令),但是我使用ips并将它们放在IIS - IP地址和域限制中,这样ip不再可以访问我的网站。

我的问题:是什么我可以做什么?看来,这个恶意用户,即使我阻止他的IP,是怎么回事,并试图从另一台IP相同的攻击(我封锁了过去三天约6 IPS是相当难看......)。你能建议我应该做的其他事情吗?

UPDATE:所有这些攻击把/**/or/**/[email protected]@version,而不是查询参数值,所以我敢肯定攻击它不是来自用户,但真正的SQL注入攻击的随机问题。问题是,这些IP地址是从不同的位置,所以我不能并报一些互联网服务提供商或主机企业...

+0

你控制你的应用程序的源代码? (即是你的代码或者是你运行一个封闭源代码的应用程序),如果你拥有自己的代码,然后扔在意想不到的查询字符串例外,使用参数化的SQL命令等 – MatthewMartin

回答

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"); 
    } 
} 
+0

延迟太大搜索每一个请求只是捕捉到一个要求在100000之间。更好的是保护输入变量时,如果存在。 – Aristos

0

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