首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >%2B解码为空格而不是加号

%2B解码为空格而不是加号
EN

Stack Overflow用户
提问于 2009-05-11 06:23:11
回答 2查看 5.8K关注 0票数 2

我们在一个特定的服务器上有一个问题。所有附加的标志张贴到应用程序被替换为空格-这是在POST和GET,并在该网站上的所有页面。

作为测试用例,我有一个小页面(它是一个ASP服务器):

代码语言:javascript
复制
<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中的有效字符:

  1. 加上符号改为空格:"1%2B2“-> "1+2",与"1 2”相同。
  2. 分号替换为逗号:"hello;“-> "hello,”

较新版本的筛选器(2.0b)不修复此问题,但允许排除某些页面。由于它是在生产中安装的,所以我们决定不删除过滤器,我们使用javascript将所有的加号更改为"&#43 " (带有空格而不是分号)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-11 16:50:34

考虑一下Ascii。用它的ascii code.It代替加号是chr(43)。asp和sql都会理解这一点。

这是一个包含所有ascii代码的表。http://www.asciitable.com/

票数 1
EN

Stack Overflow用户

发布于 2021-03-24 02:18:27

这也把我搞糊涂了。直到我看到这篇文章:Server.URLEncode开始用加号("+")替换空白,而不是%-20(%20)。

简言之:

  • RFC-1866年 (1995年左右),声明空白“”应在请求体中解析为"+“。
  • RFC-3986 (2005年1月)宣布空白“”应被解析为"%20“

在ASP框架中,它支持RFC-1866,有时还支持混合RFC-3986(似乎),因此参数%2b首先转换为+ (普通ascii/urldecode规则),然后转换为( RFC-1866规则)。

这是我的猜测,我不在乎老旧的技术,更多的细节,见

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/846934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档