我今天下午制作了一个简单的下载脚本,如下所示。
基本上我将file='whatever.something'
传递给它,并将下载内容提供给用户。
之后我开始考虑安全性......因为如果他们知道页面的网址,任何人都可以传递自己的变量......我是否需要担心这里的任何问题?
是否有人可以传递'../../../../something
之类的内容并实际返回我的/home/
目录,在那里他们可以下载他们想要的任何文件?
if(isset($_GET['file']))
{
$file = '/home/test/user-data/'.$_SESSION['user']['account_id'].'/downloads/'.$_GET['file'];
if(file_exists($file))
{
//get current ts
$now = time();
//set headers
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$now.'_file.csv');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '.filesize($file).'');
//download
readfile($file);
//delete it
unlink($file);
}
}
答案 0 :(得分:0)
我最终做了一些事情:
if(isset($_GET['file']))
{
// sanitize request and keep just the name and extension
$file_path = $_GET['file'];
$path_parts = pathinfo($file_path);
$file_name = $path_parts['basename'];
$file_ext = $path_parts['extension'];
// replaces the file location with a preset one
$file_path = '/home/test/db-backups/'.$file_name;
// make sure the file exists
if (is_file($file_path))
{
.....