System.Web.HttpUtility.UrlDecode是否存在漏洞?

3

请看下面的代码:

string _decoded = System.Web.HttpUtility.UrlDecode(
  "There%20should%20be%20text%20after%20this%0022help!");

编码行
"There%20should%20be%20text%20after%20this%0022help!" 

通过网站urldecoder.org解码后,产生以下内容:

"这里应该有文本22help!"

然而在调试器中显示的_decoded的值是: 图1:问题的调试器视图

可能是什么原因导致了这个问题?是否有一种设置或特殊编码可以在所有情况下避免这种情况发生?

编辑:是的,我认为这种行为是错误的。我不希望URLDecode向结果字符串引入\0字符,因为这将导致无效的文件名(我的代码正在移动文件)。


%00 should probably be %20 - phuzi
是的,%00 应该是 %20,但我无法控制用户如何命名文件。 - user77232
1个回答

5

this后面有一个空字节(\0 = %00),所以调试器不会显示字符串的其余部分。

因此,解码值是正确的,只是调试器的限制(或错误?)。

您可以查看这里了解有关安全性方面的空字节的更多信息。也有这个问题与之相关。


1
但是 _decoded 确实是 "There should be text after this" + "\0" + "22help!",与预期相符,因此错误不在 UrlDecode 方法中。 - Jeppe Stig Nielsen
请注意,包含\0的字符串在调试窗口(Watch、Locals、Immediate等)中看起来很好。但是当您单击小放大镜图标并进入“文本可视化器”时,问题就会出现,就像akser的图中所示。 - Jeppe Stig Nielsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接