$num = $_GET['fileid']; // get file id
$realfile = "filename".$num.'.txt';
我的问题是,是否仍然可以使毒药无效? 。' .TXT'根据我的实验,最后不会因空字节注入而消失。有没有办法空字符这个?
答案 0 :(得分:4)
我相信您的代码可能会受到目录遍历攻击的影响 - 如果有人提供“/../../foo”作为fileid
,那么路径将是"filename/../../foo.txt"
,这可能是一个有效的目标。请参阅:http://en.wikipedia.org/wiki/Directory_traversal
我在@jeroen和@ shiplu.mokadd.im建议清理你的输入 - 假设fileid
是一个数字,那么intval()
函数对你没问题:
$num = $_GET['fileid'];
$num = intval( $num );
if( $num == 0 ) {
echo "Invalid file ID: Not a number.";
exit;
} else {
$fileName = 'filename' . $num . '.txt';
if( !file_exists( $fileName ) ) {
echo "Invalid file ID: Doesn't exist.";
} else {
// do something
}
}