我最近了解到,当overlong encodings cause a security risk没有被正确验证时。根据前面提到的文章中的答复:
例如,字符<通常表示为字节0x3C,但也可以使用超长的UTF-8序列0xC0xBC(甚至更多冗余的3-或4字节序列)表示。
和:
如果您接受这个输入并在基于Unicode的基于字节的工具中处理它,那么在该工具中使用的任何字符处理步骤都可能被回避。
这意味着如果我对使用超长编码的字符串使用htmlspecialchars,那么输出仍然可以包含标记。我还假设您可以发布类似的字符(如"或;),这些字符也可以用于SQL注入。
也许是我,但我相信这是一种安全风险,相对较少的人考虑到,甚至知道。我已经编码多年了,直到现在才发现。
无论如何,我的问题是:我可以用什么工具发送超长编码的数据?熟悉这种风险的人员:您如何在网站上进行测试?我想贴一堆超长字符到我的网站,但我不知道如何做到这一点。
在我的情况下,我主要使用PHP和MySQL,但是我真正想知道的是测试工具,所以我想后端的情况并不重要。
发布于 2012-10-25 14:36:31
要测试您的站点是否易受攻击,请使用curl对页面使用post以及对utf8 long和post utf8 long编码信息的编码(您可以为此使用文本编辑器,方法是将文本编辑器编码为utf8 long,以便使用curl和php文件发布的文本以long表示)
http://php.net/manual/en/function.curl-setopt.php
发布于 2012-10-26 10:30:20
我想贴一堆超长字符到我的网站,但我不知道如何做到这一点。
除了使用curl等手动请求工具进行测试外,浏览器内测试的一个简单解决方法是重写表单提交的编码。使用例如Firebug/Chrome调试器,修改正在测试的表单以添加属性:
accept-charset="iso-8859-1"您现在可以键入字符,当编码为Windows代码页1252(*)时,这些字符将成为您想要的UTF-8超长字节序列。
例如,在表单中输入café,您将得到字节序列c a f 0xC3 0xA9,因此应用程序将认为您键入了café。输入À¼foo,序列0xC0 0xBC f o o将被提交,这可以解释为<foo。请注意,您不会在任何输出页面源中看到<foo,因为现代浏览器不会解析网页中超长的UTF-8序列,但是您可能会得到�foo或其他一些不正确的指示。
要更深入地访问医生输入并检查webapp的输出,请参阅专门的sec工具(如Burp )。
https://stackoverflow.com/questions/13070919
复制相似问题