我有一个网站,似乎得到的不仅仅是黑客攻击的公平份额。它还没有被打破,但我想在系统中构建一个检测尝试并阻止IP的好方法。
检测此问题的最佳方法是简单地搜索“varchar”和“sysobjects”之类的短语吗?
违规URL:http://www.example.com/default.aspx?id=58和char(124)+(选择Cast(Count(1)as varchar(8000))+ char(124)来自[sysobjects]其中1 = 1)> 0
来源:System.Web
消息:抛出了类型为“System.Web.HttpUnhandledException”的异常。
用户IP:187.13.142.33
用户浏览器:未知0.0
用户操作系统:未知
堆栈跟踪:System.Web.UI.Page.ProcessRequestMain上的System.Web.UI.Page.HandleError(Exception e)处于System.Web.UI.Page.ProcessRequestMain(布尔值includeStagesBeforeAsyncPoint,布尔值includeStagesAfterAsyncPoint)处于布局includeStagesBeforeAsyncPoint ,位于ASP.default_aspx.ProcessRequest的System.Web.UI.Page.ProcessRequest(HttpContext上下文)的System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext上下文)的System.Web.UI.Page.ProcessRequest()处的布尔includeStagesAfterAsyncPoint) (HttpContext context)位于System.Web.HttpApplication.ExecuteStep的System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()(IExecutionStep step,Boolean completedSynchronously)
答案 0 :(得分:1)
检测此问题的最佳方法是简单地搜索“varchar”和“sysobjects”之类的短语吗?
如果您在看到它们时立即抛出异常,那就不是......如果用户决定他们想要例如,那么您将破坏您的应用程序。搜索您的网站以获取有关varchars的信息。
如果您的应用程序写得正确,“XSS保护”这样的黑客攻击除了偶尔的破坏之外什么都不提供。如果您的应用程序没有正确编写,那么“保护”充其量只是一种无效的混淆。
您当然可以记录看起来可能是攻击的请求,以便您稍后查看攻击者IP。不幸的是,这往往没有您想象的那么多,因为许多攻击脚本都在受到破坏的服务器和僵尸网络特洛伊木马的网络上运行,有大量的IP地址可供选择。
答案 1 :(得分:0)
如果您真的想要检测(并最终阻止)入侵者,可能会采用备用路由并安装带有入侵防护系统的防火墙会很有帮助。特别是如果防火墙可以在短时间内阻止违规主机。 Afaik Astaro有这样一个系统。这样,应用程序与入侵检测逻辑在物理上隔离,并且不能(容易)相互妥协。
关于主题,我认为处理SQL注入的最佳方法是记录尝试,而不是阻止它。当然,您应该首先让系统进行彻底的代码检查,以找到任何松散的结束。务必清除所有受污染的数据(来自用户输入或其他方面),使用参数化查询和防御性代码。