我正在运行以下代码(稍微缩写)以在屏幕上呈现MySQL查询并将每行存储到存储在/ tmp /
中的csv$fileName = $username . date('Ymdhis') . '.csv';
$fp = fopen('/tmp/' . $fileName, 'w');
while ($row = $result->fetch_assoc())
{
if ($count % 2 == 0)
{
echo "blah";
fputcsv($fp, $row);
$count++;
}
else
{
echo "blah 2";
fputcsv($fp, $row);
$count++;
}
}
fclose($fp);
工作正常,没有投诉。既然文件存储在/ tmp中,我想创建一个html链接,以便可以从同一页面下载。我知道足以将.csv保留在www文档根目录之外,但从/ tmp检索此文件的最安全方法是什么?我应该设置从www到/ tmp的符号链接吗?如何最好地接近?
答案 0 :(得分:1)
首先,如果您将文件从文档根符号链接到/tmp
,您也可以直接将其放入docroot。
如果您说该文件是保密的,但必须是可下载的,则可以执行以下操作:
使用非常长且随机的文件名(如pvYLLHuGmnJnQ3LBkanQky8oh6eUkhH.csv)将文件存储在文档根目录之外的目录中。
创建某种“调度程序”:这基本上是一个PHP文件,它接受请求,验证它(确保删除任何非法字符,尤其是点和斜线!)并返回该文件(如果存在)。 / p>
然后找到一种方法告诉合法用户文件名。这可以通过返回该名称(或下载URL)而不是作为PHP请求的结果的文件内容来完成。或者例如通过电子邮件。
这当然是一种相当简单的方法,但对于大多数情况来说它应该足够安全。顺便说一下,确保使用HTTPS进行传输,否则所有这些都没有意义。