5
$num = $_GET['fileid'];                        // get file id

$realfile = "filename".$num.'.txt'; 

我的问题是它仍然可以使毒无效吗?根据我的实验,最后的 .'.txt' 不会因空字节注入而消失。有没有办法使这个字节为空?

4

1 回答 1

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
    }
}
于 2012-11-29T01:32:40.203 回答