记录了Referrer,但HttpReferrer为null

时间:2017-09-23 07:13:09

标签: c# asp.net

我正在研究你的基本反水蛭(黑名单种类)。我在日志中收到这些引荐来源,但当我尝试访问Request.UrlReferrer时,它是nullRequest.ServerVariables("HTTP_REFERER")

也是如此

这是推荐人的一个例子。这些都显示在IIS日志文件中,但是当请求进入时,我无法在后面的代码中访问它以在我的黑名单中检查它。

http://www.pinsdaddy.com/cambria-california-wedding-photography-18-mirrors-edge_cJ8jn4pAJmKSlbTCSdOcIvct6EKJC1hNE9RvlPVWmmc3iL7RWbE8NWPK2e3AlHufGJ5Y4wEz0KwkTr5tdCFtuA/HU*r3vNj3fj*lmybrtHKWHIaJbhl%7CrPNYEBp5h1LLrgiOrQqUd1yFlcQ4zk2Fg92M72f*uRfYUoZ5yXmlQZOG7*Zo6iLIcxD1tBIqMGCECNyCYSstZQN4HOcXTJocIDYNEftok4Anz4aQVpSK0CYVtVI7pYG51JUH3TWgg0KEUQRZd5ZF8UI4qQ5tseiERUk7gsHebxA3eF1LCFjrZ4PHw/

由于我正在记录这个讨厌的东西,我无法弄清楚为什么它在我的HTTP模块中不可用。每个其他链接到图像的网站都很好 - 只是不是这个特别讨厌的网站。

我尝试了各种方法。 Request.UrlReferrer.AbsoluteUriRequest.UrlReferrer.Host

string referrer = "Empty Referrer";
HttpContext context = ((HttpApplication)sender).Context;
if (context.Request.UrlReferrer != null)
{
    referrer = context.Request.UrlReferrer.AbsoluteUri;
}

我开始怀疑引用者值中的字符组合是否在.NET中某处爆炸。 IIS很好,所以我应该能够在代码中访问它。

注意 - 这些是HTTP请求的http。没有SSL。

1 个答案:

答案 0 :(得分:1)

您实际上不需要实现自己的代码来处理此问题

IIS重写模块可以做基本的东西,可以解决你的问题

如果我是正确的,你想要通过某些推荐阻止某些请求,或者你可能只想阻止所有

示例仅用于阻止http:// .pinsdaddy.com和http:// .somesite.com

您也可以添加任意数量的正则表达式

  <rules>
    <clear />
    <rule name="RequestBlockingRule1" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions logicalGrouping="MatchAny">
            <add input="{HTTP_REFERER}" pattern="http://*.pinsdaddy.com" />
            <add input="{HTTP_REFERER}" pattern="http://*.somesite.com" />
        </conditions>
        <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission to view this directory or page using the credentials that you supplied." />
    </rule>
  </rules>