我们在特定服务器中遇到问题。发布到应用程序的所有加号都将替换为空格 - 即POST和GET,以及该站点上的所有页面。 作为测试用例,我有这个小页面(它是一个ASP服务器):
<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>
在其他所有服务器上运行良好,但在一台服务器上,用空格替换了
示例:输入“1 2+3
” - 请求(“Plus”)为“1 2 3
”,查询字符串为“1+2+3
”。不好。其他字符似乎正确解码。
应该说有人试图“强化”这台服务器免受攻击,因此可能会打开模糊的IIS选项(虽然我们确实删除了ISAPI过滤器)。
感谢。
更新: 事实证明,安装了另一个过滤器,来自http://www.codeplex.com/IIS6SQLInjection的SQL注入过滤器ISAPIClipSQLInjection.dll。 过滤器有问题 - 它取代了POST和GET中的有效字符:
较新版本的过滤器(2.0b)无法解决此问题,但允许排除某些页面。由于它已在生产中安装,我们决定不删除过滤器,我们使用javascript将所有加号更改为"+ "
(带空格而不是分号)。
不是最佳解决方案,但这就是老板想要的。
答案 0 :(得分:1)
考虑Ascii Code。在加号的位置使用其ascii代码。它将是chr(43)。 asp和sql都能理解这一点。
这是一个包含所有ascii代码的表。 http://www.asciitable.com/
答案 1 :(得分:0)
嗯,这也让我很困惑。直到我看到这个帖子:Server.URLEncode started to replace blank with plus ("+") instead of percent-20 ("%20")
简而言之:
而在ASP框架中,它支持RFC-1866,有时会混合RFC-3986(似乎),所以参数%2b
首先转换为+
(正常的ascii/urldecode规则,然后它转换为
(RFC-1866 规则)
这是我的猜测,我不在乎过时的技术,欲了解更多详情,请参阅