我已经有了一个PHP代码来强制用户下载一个文件,代码运行良好
问题是,当用户想要下载文件名中包含分号的文件时
例如如果文件名XYZ.zip
但如果文件名为aaaX;Y.zip(读作aaax[分号]Y[点]zip)当用户下载时,文件名变为aaaX
它在第一个分号中被剪切
<?php
$a=basename($_GET['fn']);
$sizepath =filesize(base64_decode($_GET['path']));
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=".$a);
header('Cache-control: private, must-revalidate');
header('Content-Transfer-Encoding: binary');
// load the file to send:
readfile(base64_decode($_GET['path']));
?>
使用urlencode()
,如下所示:
header("Content-Disposition: attachment; filename*=us-ascii'en-us'".urlencode($a));
有关更多信息,请参阅RFC 2231。
试试这个
header("Content-Disposition: attachment; filename="" . $a . """ );
让用户控制最终在file_get_contents()中的变量时,请务必小心。这可能导致路径遍历漏洞。