【发布时间】:2011-02-09 17:31:38
【问题描述】:
我有一个关于这样做有多安全的问题。我已经编写了一个 php 强制下载脚本,实际提供文件的部分应该看起来很熟悉:
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Length: ' . filesize("user_files/".$temp_actual));
header('Content-Disposition: attachment; filename="'.$filename."\"");
readfile("user_files/".$temp_actual);
$filename 是他们看到的文件名,$temp_actual 是我服务器上的真实文件名。显然,上面有大量代码可以防止坏事发生,但基本上,用户应该能够下载他们上传的任何内容。如果他们上传 .php 文件,我真的不希望它在服务器上运行,我希望它通过强制下载传递给他们(他们确实需要能够上传 any 文件类型) .
它按预期工作,所有文件扩展名都被强制下载,但我只是想绝对确定它们不能在我的服务器上运行任何 php 或 html 文件。
其他信息
user_files 位于网站根目录中,但 .htaccess "deny from all"
user_files 目录中的每个文件都附加了 .file 而不是原始扩展名,当用户下载他们的文件时,原始扩展名被替换(可能有点过头了)。
【问题讨论】:
-
您的问题是关于您所说的所有前面的代码“在此之上的代码山以防止坏事”
-
不要使用application/force-download;请改用 application/octet-stream。
-
那么这些变量是从哪里来的???你了解什么是输入验证吗?
-
大声笑@Rook,如果我发布了您将阅读一个小时的整个代码...请阅读下面的“aaz”cmets - 也许您可以提供帮助。我只想知道用户不能告诉我的服务器显示 php 文件而不是下载它。我根本不希望由 php 解析的文件。就像我说的,现在效果很好,但可能有一个我不知道的技巧。
-
@Grant 很酷,你没有给任何人足够的信息来告诉你这是否安全。我只是假设它 100% 安全。祝你有美好的一天。