我们在一个特定的服务器上有一个问题。所有附加的标志张贴到应用程序被替换为空格-这是在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“--请求(”1 2 3“)是"1 2 3",查询字符串是"1+2+3”。不是很好。其他字符似乎是正确的解码。
应该说有人试图“加固”此服务器以防止攻击,因此可能会打开一些模糊的IIS选项(尽管我们确实删除了ISAPI过滤器)。
谢谢。
更新:原来还安装了另一个过滤器,来自http://www.codeplex.com/IIS6SQLInjection的ISAPIClipSQLInjection.dll http://www.codeplex.com/IIS6SQLInjection。
过滤器是错误的-它替换了POST和GET中的有效字符:
较新版本的筛选器(2.0b)不修复此问题,但允许排除某些页面。由于它是在生产中安装的,所以我们决定不删除过滤器,我们使用javascript将所有的加号更改为"+ " (带有空格而不是分号)。
不是最理想的解决方案,但这正是老板想要的。
发布于 2009-05-11 16:50:34
考虑一下Ascii。用它的ascii code.It代替加号是chr(43)。asp和sql都会理解这一点。
这是一个包含所有ascii代码的表。http://www.asciitable.com/
发布于 2021-03-24 02:18:27
这也把我搞糊涂了。直到我看到这篇文章:Server.URLEncode开始用加号("+")替换空白,而不是%-20(%20)。
简言之:
在ASP框架中,它支持RFC-1866,有时还支持混合RFC-3986(似乎),因此参数%2b首先转换为+ (普通ascii/urldecode规则),然后转换为( RFC-1866规则)。
这是我的猜测,我不在乎老旧的技术,更多的细节,见
https://stackoverflow.com/questions/846934
复制相似问题