我对这个主题的初步理解是,我需要防止请求中提供一些垃圾字符以避免这些攻击。
我决定在使用之前通过对每个请求参数进行模式匹配来解决这个问题。互联网上的大多数帖子都讨论了 Null Byte,给出的示例显示了文件 IO 如何成为这种攻击的主要受害者。所以以下是我的问题
- 文件 IO 是唯一可以影响空字节的东西,还是其他操作也是这种攻击的受害者?
- 如果我想过滤我的请求参数以确保 null 再见攻击的安全,我需要注意哪些字符/字符串/模式?我有一份清单,我确信它不完整。%00 , \0 , 0x00 十六进制
我指的文章是:
http://projects.webappsec.org/w/page/13246949/Null%20Byte%20Injection
http://www.perlmonks.org/index.pl?node_id=38548
http://hakipedia.com/index.php/Poison_Null_Byte
提前致谢
所以为了更清楚:
第一篇文章指出了我正在谈论的 java 中的漏洞。字符串serverlogs.txt%00.db在 java 中是允许的,但对于 C/C++,这是serverlogs.txt,因为在 C %00 中将被空字节替换,导致字符串在 serverlogs.txt 之后终止。所以我们应该避免这样的字符。这就是我试图弄清楚我不应该允许哪些这样的字符。
String fn = request.getParameter("fn");
if (fn.endsWith(".db"))
{
File f = new File(fn);
//read the contents of “f” file
…
}