没有运气在互联网上找到答案所以我想我会问专家。使用url查询下载文件会带来哪些安全威胁,例如这样的代码:
if(isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != ""){
$file = urldecode($_SERVER['QUERY_STRING']);
if(file_exists("files/".$file)){
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize("files/".$file));
ob_clean();
flush();
readfile("files/".$file);
exit;
}
}
会受到像“?.. \ .. \ .. \ any \ file \ here”这样的查询字符串的影响,但不是全部吗?这不能被一个if过滤掉吗?
$file = urldecode($_SERVER['QUERY_STRING']);
if(strpos($file, ".\\") !== false || strpos($file, "./") !== false){
echo "No you won't get my system files";
exit;
}
如果没有“上传”功能,阻止访问\ files \目录和“if strpos”的.htaccess文件会安全吗?
编辑:错误的代码示例
答案 0 :(得分:0)
1)您很容易受到..\..\..\any\file\here
2)我建议你在files/
中获取所有子文件的列表。然后,如果请求的文件与任何这些文件都不匹配,则返回404错误代码。