Iis %2B解码到空格而不是加号

Iis %2B解码到空格而不是加号,iis,encoding,asp-classic,isapi,Iis,Encoding,Asp Classic,Isapi,我们在特定服务器中遇到问题。所有贴在应用程序上的加号都将替换为空格,即该站点所有页面上的“发布”和“获取”中的空格。 作为一个测试用例,我有一个小页面(它是一个ASP服务器): 以前的值: 查询字符串: 在其他每台服务器上都可以正常工作,但在一台服务器上,plus会被空格取代。 例如:对于输入“12+3”,请求(“Plus”)是“13”,查询字符串是“1+2+3”。无益。其他字符似乎解码正确。 应该说有人试图“强化”此服务器以抵御攻击,因此可能会打开模糊的IIS选项(尽管我们确实删除了ISA

我们在特定服务器中遇到问题。所有贴在应用程序上的加号都将替换为空格,即该站点所有页面上的“发布”和“获取”中的空格。
作为一个测试用例,我有一个小页面(它是一个ASP服务器):


以前的值:
查询字符串:
在其他每台服务器上都可以正常工作,但在一台服务器上,plus会被空格取代。
例如:对于输入“
12+3
”,请求(“Plus”)是“
13
”,查询字符串是“
1+2+3
”。无益。其他字符似乎解码正确。
应该说有人试图“强化”此服务器以抵御攻击,因此可能会打开模糊的IIS选项(尽管我们确实删除了ISAPI筛选器)。
谢谢


更新: 原来安装了另一个过滤器,SQL注入过滤器是来自的PicLipSqlInjection.dll。
筛选器存在错误-它将替换POST和GET中的有效字符:

  • 加号替换为空格:“1%2B2”->“1+2”,与“12”相同
  • 分号替换为逗号:“hello;”->“hello,”
  • 较新版本的筛选器(2.0b)无法解决此问题,但允许排除某些页面。因为它是在生产环境中安装的,所以我们决定不删除过滤器,我们使用javascript将所有加号更改为
    “+”
    (带空格而不是分号)。

    不是最佳解决方案,但这正是老板想要的。

    考虑Ascii代码。用它的ascii码代替加号。它应该是chr(43)。asp和sql都能理解这一点

    这是一个包含所有ascii代码的表。
    考虑Ascii码。用它的ascii码代替加号。它应该是chr(43)。asp和sql都能理解这一点

    这是一个包含所有ascii代码的表。

    嗯,这也让我感到困惑。直到我看到这个帖子:

    简言之:

    • (大约在1995年),声明在请求体中将空白的“”解析为“+”
    • (2005年1月)声明空白“”应解析为“%20”
    在ASP框架中,它支持RFC-1866,有时还支持混合RFC-3986(似乎),因此参数
    %2b
    首先转换为
    +
    (普通ascii/urldecode规则,然后转换为
    (RFC-1866规则)


    这是我的猜测,我不在乎过时的技术,更多细节,请参见,这也让我困惑。直到我看到这篇文章:

    简言之:

    • (大约在1995年),声明在请求体中将空白的“”解析为“+”
    • (2005年1月)声明空白“”应解析为“%20”
    在ASP框架中,它支持RFC-1866,有时还支持混合RFC-3986(似乎),因此参数
    %2b
    首先转换为
    +
    (普通ascii/urldecode规则,然后转换为
    (RFC-1866规则)


    这是我的猜测,我不在乎过时的技术,更多细节,请参见

    这不是一个很好的解决方案,但它是有效的。我会接受你的解决方案,因为这个小补丁最终就是我们所做的。无论如何,谢谢。不要太过个人化,但我注意到你住在以色列。那里的生活情况如何。它是否像我们的媒体描述的那样糟糕?我想很快去那里,因为我喜欢那里的文化和人民。这是一个很大的乐趣,但这里几乎不是谈论这一点的地方。请随时与我联系(我的博客有一些链接)这不是一个很好的解决方案,但它是有效的。我会接受你的解决方案,因为这一小部分就是我们最终所做的。无论如何,谢谢。不要太过个人化,但我注意到你住在以色列。那里的生活如何。它是否像我们的媒体描述的那样糟糕?我想很快去那里,因为我爱那里的文化和人民。这很好这是一个很大的乐趣,但这里几乎不是谈论这个的地方。请随时与我联系(我的博客有一些链接)
    <html>
    <body>
      <form method="post">
        <input type="text" name="Plus" id="Plus" />
        <input type="submit" />
      </form>
      Previous Value: <%= request("Plus") %><br />
      Query String: <%= request.querystring %>
    </body>
    </html>