web.Config请求筛选,阻止以_

时间:2016-02-19 04:43:44

标签: asp-classic web-config iis-8

我正在处理传统的经典asp应用程序,我想阻止以下划线开头的文件" "通过浏览器请求检索。理想情况下,我希望任何以" "开头的文件显示404未找到的异常。

原因是我不想用.Inc扩展名来命名我的文件因为它使开发变得困难,因为我丢失了语法高亮,智能感知以及我在Visual中使用的其他东西工作室。

由于这是在IIS8中运行的,有什么办法可以在ASP处理程序处理页面之前过滤阻止这些文件的请求吗?

1 个答案:

答案 0 :(得分:1)

临时答案:

我在http处理程序中映射了两次ASPClassic。首先,我将其映射到_ * .asp。但是我为asp dll使用了一个无效的dll,这将导致错误:

由于Web服务器上的ISAPI和CGI限制列表设置,无法提供您请求的页面。

这是404.2

然后我映射了正常的* .asp处理程序。

如果HttpHandler与请求匹配,则不会传递给下一个HttpHandler。所以匹配请求的第一个HttpHandler就是使用它的那个。

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
      <remove name="OPTIONSVerbHandler"/>
      <remove name="TRACEVerbHandler"/>
      <remove name="ASPClassic"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
      <add name="ASPClassic_No" path="_*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll2" resourceType="File" />
      <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="File" />
    </handlers>
</web.Server>

此外,服务器端仍然可以处理这些文件,因为SSI不依赖于请求。

如果有人知道这样做的更清洁,非黑客的方式,我全都耳朵!

我之前使用这个asp文件来做这件事:

<%
  notFound_fullName = Request.ServerVariables("SCRIPT_NAME")
  notFound_pathArray = split(notFound_fullName, "/")
  notFound_fname = notFound_pathArray(UBOUND(notFound_pathArray))
  If (InStr(1, notFound_fname, "_") = 1) Then
    Response.Status ="404 Not Found"
    Response.End
  End If
%>

但是,我遇到了一个场景,我需要将它包含在页面上包含它的页面上,同时也将它包含在被包含的页面中。

E.g。

_cUser -> include 404handler code (alone with no other includes)
_baseWebService -> Include _AllClasses (includes 404 handler again)

由于选项严格,因此无法使用选项严格,因为它要么重新定义变量,要么未定义变量....