我正在研究你的基本反水蛭(黑名单种类)。我在日志中收到这些引荐来源,但当我尝试访问Request.UrlReferrer
时,它是null
。 Request.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.AbsoluteUri
,Request.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。
答案 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>