2

我有一个自定义 HttpModule 可以从旧版本的网站重定向旧版 URL,该网站根据重定向的数据库表检查传入的请求 URL。

但是,当传入的请求 URL 包含加号 (+) 时,请求不会通过 HttpModule - 它可以按预期对标准 URL 工作。

例如,这些 URL 有效:

http://www.example.com/sample-url
http://www.example.com/sample url
http://www.example.com/sample%20url

这些不会:

http://www.example.com/sample+url
http://www.example.com/sample%2Burl

这是我的模块声明:

<add name="LegacyUrlHttpModule" type="Web.LegacyUrlHttpModule, Framework.Web" preCondition="managedHandler" />

我在这里错过了一个设置还是什么?

4

3 回答 3

4

Scott Hanselmann 写了一篇nice blog post解释如何在 url 的 Path 部分启用各种废话符号。

他的结论如下:

在为在请求路径中获得疯狂的东西所做的所有努力之后,值得一提的是,简单地将值保留为查询字符串的一部分(还记得本文开头的 WAY 吗?)更容易、更清洁、更灵活,而且更多安全的。

所以基本上如果你在一个 url 中有这样的字符,这些字符应该作为查询字符串参数传递,而不是试图在路径部分传递它们。

于 2013-08-27T16:08:49.610 回答
4

默认情况下, IIS 拒绝+URL。一种解决方法是allowDoubleEscaping

<system.webServer>
    <security>
            <requestFiltering allowDoubleEscaping="true" />
    </security>
</system.webServer>

但请注意,这可能会使您的网站更容易受到恶意 URL 的攻击。

于 2013-08-27T19:17:14.363 回答
0

您可以按照以下步骤操作:

  1. 在 IIS 网络服务器部分,双击“请求过滤”图标
  2. 在“文件扩展名”右键单击->编辑功能设置...'文件'web.config'
  3. 选中“允许双重转义”选项(默认情况下未选中此选项)
  4. 为“默认网站”(或您为网站命名的任何名称)重复上述所有 3 个步骤
  5. 重新启动 IIS
于 2020-01-23T06:31:59.637 回答