【问题标题】:c# URL with plus sign not running through custom HttpModule带有加号的 c# URL 未通过自定义 HttpModule 运行
【发布时间】:2013-08-27 16:06:46
【问题描述】:

我有一个自定义 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" />

我在这里错过了一个设置吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc httpmodule


    【解决方案1】:

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

    他的结论如下:

    经过所有努力在请求路径中获得疯狂的东西之后,它是 值得一提的是,只需将值保留为查询的一部分 字符串(还记得这篇文章开头的 WAY 吗?)更容易, 更清洁、更灵活、更安全。

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

    【讨论】:

    • 感谢您的反馈。这确实解决了我的问题,但是,我不想在站点内打开安全漏洞,所以我已经推迟了我需要进行的更改 - 但如果我想走这条路,这将解决问题。
    【解决方案2】:

    IIS 默认拒绝 URL 中的 +。解决方法是allowDoubleEscaping

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        相关资源
        最近更新 更多