中止asp.net请求而不向客户端发送任何响应

时间:2011-10-21 16:10:00

标签: asp.net asp.net-mvc

我的小型ASP.NET MVC应用程序收到了一些虚假“setup.php”页面的请求(每周容易200多个)。我猜这是一些试图在网络上发现易受攻击的网站的机器人。这不是一个大问题,但它确实倾向于用垃圾填满我的错误日志,并且可能更难找到需要修复的实际问题。

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

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

  1. 是否可以在不发送响应的情况下直接停止处理ASP.NET / MVC中的请求

  2. 这个问题有更好的解决方案吗?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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