通过检查我的elmah日志,我发现我一直收到“太长的网址”请求。错误是:
System.Web.HttpException (0x80004005): The length of the URL for this request exceeds the configured maxUrlLength value.
at System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)
以下是我收到的请求:
/index.php/blog/post/the_ten_deceptions_of_the_datetimepicker / + [PLM = 0] + GET HTTP +:/www.visualhint.com/index.php/blog/post/the_ten_deceptions_of_the_datetimepicker / + [0,23778,23037] + - > + [N] + POST HTTP +:/www.visualhint.com/index.php/blog/post/the_ten_deceptions_of_the_datetimepicker / + [0,0,2007]
(不要对php的事情感到惊讶......在成为asp.net mvc网站之前,我的网站是在php中,现在我需要将这种旧的URL重定向到我的新url格式,这很有效当网址停在/index.php/blog/post/the_ten_deceptions_of_the_datetimepicker)
什么可以产生这些请求?这听起来有恶意吗?
我有自定义错误设置,所以我虽然这样的请求会被重定向到我的自定义错误页面,但事实并非如此。相反,人们得到典型的黄色屏幕(萤火虫提到这是一个400 Bad Request)。如果你看一下上面的堆栈跟踪,它很短,异常似乎很早就被捕获(甚至没有调用Application_BeginRequest)。是否可以显示我的自定义错误页面,或者在发生此类异常时我是否至少可以重定向到我的主页?
我尝试在web.config中添加一行错误400:
<customErrors mode="RemoteOnly">
<error statusCode="400" redirect="/" />
</customErrors>
这会重定向到主页右侧,但会在aspxerrorpath查询字符串值中添加完整的URL。
感谢您的帮助。
答案 0 :(得分:1)
谷歌搜索帮助我发现其他人得到了这种请求。有人回答:
我很确定这是一种自动提交垃圾邮件的方式。必有 是配置错误,因为它不应该留下这样的 在推荐人领域多汁的踪迹!
首先它告诉一些脚本获取一个URL,然后它指示发布到 一个URL(很容易阻止直接POST的垃圾邮件而不会得到 第一)。
这些数字可能与发布的垃圾邮件有关(想想 它作为垃圾邮件数据库中的索引。)
因此,由于很有可能这些请求不是来自正常链接的人类,我最终得到了以下解决方案。这样可以避免污染我的elmah日志,这会给调用者提供一个空白页面,其中包含404代码:
public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
HttpException hExc = e.Exception.GetBaseException() as HttpException;
if (hExc != null)
{
if (hExc.ErrorCode == unchecked((int)0x80004005))
{
e.Dismiss();
return;
}
}
// Here I do some stuff if the error has to be logged.
}
void Application_Error(object sender, EventArgs e)
{
Exception exc = Server.GetLastError();
HttpException hExc = exc as HttpException;
if (hExc != null)
{
if (hExc.ErrorCode == unchecked((int)0x80004005))
{
Uri uri = HttpContext.Current.Request.Url;
Response.Clear();
Response.StatusCode = 404;
Response.End();
Server.ClearError();
}
}
}
而不是返回404代码,我宁愿不发送响应(调用者会超时)但是可以使用asp.net吗?不知道......