创建自定义的 ASP 错误消息

如果使用 Internet 服务器 API (ISAPI) 或 Active Server Pages (ASP) 开发一个应用程序以处理错误,则应该通过映射 URL 来自定义错误消息。请注意错误状态是在 URL 参数中传递给应用程序的,并且应用程序必须设置 HTTP 头状态。否则,HTTP 响应状态为“HTTP 1.1 200 OK”。

如果将自定义错误消息映射到某个 ASP 文件,则必须使用 Server.HTMLEncode 编码输出以避免出现站点间脚本安全问题。恶意用户可能发送包含类似 < > " - 的字符的错误标题,以将脚本插入到 ASP 自定义错误文件编译的响应中。例如,如果使用标题生成个人问候语,HTML 会对您的输出进行编码,如下例所示:

<%@ LANGUAGE="VBScript" %>
<%
  Response.CodePage = 1252
  Response.Write("Hello, " & Server.HTMLEncode(Request.Form("UserName")));
  Response.Write("This is why you received an error:");
%>

替代的解决方案是在 ASP 自定义错误文件中添加一个函数,它使用 Windows 脚本宿主的正则表达式对象从发送到该函数的字符串中删除潜在有害的字符。以下两个 ASP 示例包含此类函数。第一个示例是使用 Microsoft Visual Basic® Scripting Edition (VBScript) 编写的,而第二个示例则是使用 Microsoft JScript® 编写的:

<%@ LANGUAGE="VBScript" %>
<%
  Response.CodePage = 1252
  Response.Write("Hello, " & RemoveBadCharacters(Request.Form("UserName")))
  Response.Write("<BR>This is why you received an error:")
  Function RemoveBadCharacters(strTemp)
    Dim regEx
    Set regEx = New RegExp
    regEx.Pattern = "[^\s\w]"
    regEx.Global = True
    RemoveBadCharacters = regEx.Replace(strTemp, "")
  End Function
%>
<%@ LANGUAGE="JScript" %>
<%
  Response.CodePage = 1252;
  Response.Write("Hello, " + RemoveBadCharacters(Request.Form("UserName")));
  Response.Write("<BR>This is why you received an error:");
  function RemoveBadCharacters(strTemp) { 
    strTemp = strTemp.replace(/[^\s\w]/g,"); 
    return strTemp;
  }
%>

在上面的两个示例中,指定代码页以确保正确地编码。

相关主题

© 1997-2003 Microsoft Corporation。保留所有权利