我们在特定服务器中遇到问题。发布到应用程序的所有加号都替换为空格 - 在 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
”-request(“Plus”) 为“ 1 2 3
”,查询字符串为“ 1+2+3
”。不好。其他字符似乎正确解码。
应该说有人试图“强化”该服务器以抵御攻击,因此可能会打开模糊的 IIS 选项(尽管我们确实删除了 ISAPI 过滤器)。
谢谢。
更新:原来安装了另一个过滤器,来自http://www.codeplex.com/IIS6SQLInjection的 SQL 注入过滤器 ISAPIClipSQLInjection.dll 。
过滤器有问题 - 它替换了 POST 和 GET 中的有效字符:
- 加号用空格代替:“1%2B2”->“1+2”,同“1 2”
- 分号替换为逗号:“hello;” ->“你好”
较新版本的过滤器 (2.0b) 无法解决此问题,但允许排除某些页面。由于它是在生产中安装的,我们决定不删除过滤器,我们使用 javascript 将所有加号更改为"+ "
(带空格而不是分号)。
不是最佳解决方案,但这正是老板想要的。