2011-10-21 67 views
4

我的小ASP.NET MVC应用程序越来越多的要求伪造“setup.php”页面(每周很容易200)。我猜这是一些机器人试图在网上找到易受攻击的网站进行破解。这不是一个大问题,但它确实倾向于用垃圾填充我的错误日志,并且可能会使找到需要修复的实际问题变得更加困难。放弃一个asp.net请求,但不向客户端发送任何响应

我想要做的是创建一个路径来处理所有.php请求(可能还有其他明显伪造的扩展名)并以某种方式处理它们。如果立即中止请求,我的应用程序不会浪费时间/带宽创建和发送响应(即使它只是一个404),那将会是太棒了。此外,假设这些是恶意请求,这将是非常好的,让他们的服务器坐,等待超时而不是立即作出回应,并迅速继续尝试别人的服务器:)

所以,我想这是一个2部分问题。

  1. 是否可以简单地停止处理中ASP.NET/MVC的请求,不发送响应

  2. 是否有更好的解决这个问题?

回答

3

如果您使用IIS7结账http://learn.iis.net/page.aspx/499/request-blocking---rule-template/

这可以在你的web.config以及指定

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="RequestBlockingRule1" patternSyntax="Wildcard"> 
       <match url="*" /> 
       <conditions> 
        <add input="{URL}" pattern="*.php*" /> 
       </conditions> 
       <action type="CustomResponse" statusCode="403" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 
+0

这是一个非常好的解决方案。但是,看起来这将会返回一个403,如果有一种方法不能实际返回任何东西,它会更酷。我真的很喜欢杀死请求,并且不会将任何东西发回客户端。 – herbrandson

+1

@herbrandson:只需将操作更改为此元素告诉URL重写模块结束HTTP请求。从网站获取的信息(位于页面2/3的访问块部分):http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module/ – Tommy

0

你可以尝试返回EmptyResult。我从来没有尝试过,但文档说:“表示一个什么都不做的结果,比如一个不返回任何东西的控制器动作方法。”

0

最好的解决方案是在您的项目中设置正确的404处理并返回404 Not Found页面,这样您就不会收到未处理的异常消息。这样你就不会为这些机器人编写代码,但是你实际上正在为所有用户编写一些有用的东西,而这些东西可能会偶然地发生在一个坏的或死的链接上(它会发生)。这questionanswer有很多不错的选择。你可以使用这些选项,如果你仍然真的想发送没有响应,你可以调用Response.Clear和Response.End,如果URL是index.php,则不返回任何响应。关键是添加全部路由来处理与存在的控制器/操作不匹配的所有请求。

相关问题