0

使用包含 web.config 的 url 从 IIS(托管 ASP.NET MVC 3 站点)请求页面会产生 404 错误。带有 app.config 的 URL 没有问题。本地 Visual Studio 开发服务器对此类 url 没有任何问题。

1 - 除了 web.config 之外,还有哪些其他特殊词被 IIS 处理?在请求过滤页面/隐藏段选项卡中,这是当前状态:

在此处输入图像描述

我猜这些不是特殊词,因为 IIS 可以毫无问题地处理 bin、App_code 等词。

答:我想这些是 IIS 以这种方式处理的词。所以这些是我认为的默认词,这个列表是可配置的(新项目可以添加到这个列表中)。

2 - 是否有任何快速修复(如通过 web.config 修改)来处理带有这些特殊单词的 url?

顺便说一句,我不想​​提供 web.config 文件。网址格式为: www.mysite.com/es/web.config/1

4

2 回答 2

2

这是该部分下的 IIS 配置的Request Filtering一部分:

请求过滤

您可以添加/删除过滤器。
但是,我确实认为将其删除是一个非常糟糕的主意web.config

http://www.iis.net/configreference/system.webserver/security/requestfiltering

于 2013-02-01T16:51:38.730 回答
0

原因:

正如您已经展示了 IIS 配置的快照。这些是 .Net 应用程序中保留的文件夹和文件,因此 IIS 想要保留这些以确保安全。

包含这些字符串的 URL 作为 404 响应返回,前提是这些字符串出现在之前?并且恰好在 2 个斜杠之间/../或最后。例如:www.example.com/bin/anything.extwww.example.com/folder/sub/web.config

IIS 在任何地方都可以匹配这些字符串,因为我们可以在任何目录级别使用 web.config。

如果这些字符串有任何内容,那么页面将由 IIS 提供。例如:www.example.com/bin-folder/anthing.extwww.example.com/sub/bin.htmlwww.example.com/-web.confing/page.aspx都可以。


我建议在这些字符串中使用一些其他词,或者在带有扩展名的 URL 末尾使用,这样它就不会出现在两个斜杠之间。

例如:www.example.com/en-web.config/1www.example.com/en/1/web.config.aspx



即使那样我也有一个棘手的解决方案:

如果您真的需要这些字符串,而 URL 中没有其他词,那么我建议您使用use URL-ReWrite.. 这可能整体上并不快,但除了第 2 步之外它快速方便,因为第 2 步取决于您的应用程序。

1-在顶级的 IIS 中添加此规则:

正则表达式匹配:(/web|^web)\.(config$|config/) //OR as your requirement

重新写入:handler.aspx?url={REQUEST_URI}

<rule name="web-config" stopProcessing="true">
  <match url="(/web|^web)\.(config$|config/)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
  <action type="Rewrite" url="handler.aspx?url={REQUEST_URI}" appendQueryString="false" />
</rule>

2-handler.aspx(或任何其他语言页面)检查urlGET 变量并做出相应的响应。Request.QueryString("url")

  • 小心操作,因为您在这里控制着安全性。
  • 我建议仅将实际页面内容包含在响应中,handler.aspx or handler.php而不是重定向等。
  • 在包含内容之前首先验证 URL(通过正则表达式等),并包含硬编码的内容,不要将 URL 的任何部分放入变量中,并在 response-inclusion-code 中使用该变量。

3-最后从 IIS 管理器中,在特定网站中转到请求过滤->隐藏段选项卡并删除所需字符串。例如:web.config。这一步也可以通过 web.config 完成:

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="209715200" />
    <hiddenSegments>
      <remove segment="web.config" />
    </hiddenSegments>
  </requestFiltering>
</security>

现在,IIS 将为页面提供服务,您的处理程序页面将在用户浏览器中显示具有完全相同 URL 的输出。

于 2015-06-16T12:10:33.637 回答