Iis 处理页面时出错,未捕获所有错误

Iis 处理页面时出错,未捕获所有错误,iis,asp-classic,Iis,Asp Classic,我在我的经典ASP网站上有一个简单的错误检查页面,并设置了一个自定义错误页面,以便脚本错误(500和500.100)调用此错误页面,以便将错误记录到MySQL表中: 我已经收到了很多类似的错误,没有错误号码记录。我发现问题的原因是正在发送的cookie,并且至少有一个cookie没有名称 当您执行请求(“id”)时,它会检查查询字符串、表单post,然后检查cookies。经典ASP似乎无法处理没有名称的Cookie,在这种情况下会出现错误 看看我收到的请求,它们看起来确实像是针对cookie

我在我的经典ASP网站上有一个简单的错误检查页面,并设置了一个自定义错误页面,以便脚本错误(500和500.100)调用此错误页面,以便将错误记录到MySQL表中:



我已经收到了很多类似的错误,没有错误号码记录。我发现问题的原因是正在发送的cookie,并且至少有一个cookie没有名称

当您执行
请求(“id”)
时,它会检查查询字符串、表单post,然后检查cookies。经典ASP似乎无法处理没有名称的Cookie,在这种情况下会出现错误

看看我收到的请求,它们看起来确实像是针对cookies的不寻常的黑客尝试

要查看是否是这种情况,我建议您也记录CookieHTTP头

一个选项是从
Request
更改为
Request.QueryString
Request.Form
,具体取决于您希望传递参数的方式(GET或POST)

如果这不是一个选项,那么您可以添加一些代码来检查这个无名cookie问题,类似这样的操作应该可以完成这项工作:

On Error Resume Next
Request.Cookies("test")
If Err.Number <> 0 Then Server.Transfer("/common/500.asp")
On Error Goto 0
出错时继续下一步
请求Cookies(“测试”)
如果错误号为0,则为Server.Transfer(“/common/500.asp”)
错误转到0
这只是检查是否可以读取cookie,而不管您使用的cookie名称是什么,也不管cookie是否存在。如果发送了无效的cookie,它将结束执行。如果有一个include文件在每个请求上运行,那么可以将其添加到开头


有关更多信息,请参阅我的。

谢谢@John。我添加了一行,将'request.servervariables(“HTTP_COOKIE”)'分配给变量,以便查看出现了什么。请参阅上的有关此问题的更多信息,包括使用IIS URL重写规则的一些可能很好的解决方案。由于我的COOKIE测试代码错误,更新了我的答案。
e = newstr(request("id"))
<%
''get the cookie data
ck = Request.ServerVariables("HTTP_COOKIE")

'' does the cookie data contain "; = true;" somewhere, does not matter where
v1 = instr(ck, "; =true;")

''if the cookie data starts with "=true;" OR if "; =true;" appears somewhere in the cookie, then redirect somewhere else
if left(ck,6) = "=true;" OR v1 > 0 then response.redirect ("somewhere-else.asp")
%>
On Error Resume Next
Request.Cookies("test")
If Err.Number <> 0 Then Server.Transfer("/common/500.asp")
On Error Goto 0