这就是我希望用户能够:
所以我用以下.htaccess
创建了这个目录Allow from all
DirectoryIndex .x
php_flag engine off
Options -Indexes
Options -ExecCGI
AddType text/plain .html .htm .shtml .php .php3 .php5 .phtml .phtm .pl .py .cgi
ForceType applicaton/octet-stream
我的问题是,这是安全吗?
答案 0 :(得分:6)
我想说:没有
如果您拒绝所有人访问并通过提供文件的脚本管理下载,那么应该更安全。 此外,您应该重命名文件,以便例如没有人放置他自己的htaccess或其他什么。 您可以存储在数据库中的原始文件名。
为什么:您永远不会知道将来会发生什么,某些文件以后可以执行,在其他地方放置一个不安全的脚本,允许用户包含这些上传的文件,等等。
答案 1 :(得分:4)
我也同意Dr.Molle你应该重命名文件并动态发送。
但是,我强烈建议不要使用mod_xsendfile用于Apache,而不是通过脚本发送它们,这将占用更多的内存。
使用mod_xsendfile,而不是通过PHP输出文件,您只需发送XSendFile标题:
<?php
header('Content-Disposition: attachment;filename=originalname.txt');
header('X-Sendfile: /path/to/file.txt');
?>
这样,您可以将所有文件保留在Web目录根目录之外,因此外部世界完全无法访问。你根本不用担心.htaccess。
如果你的主机允许你安装新的Apache模块,你需要安装apxs(可能会)。如果未安装,则需要在启用apx的情况下重建Apache。根据我的经验,如果你可以管理它,那是值得的。 XSendFile省去了很多麻烦。
答案 2 :(得分:0)
我同意通过特殊脚本下载它们会好得多。但如果不可能,那就做两件事:
Header set Content-disposition "attachment"
这会强制浏览器下载文件而不是渲染文件。
但是,您必须确保无法通过其他潜在漏洞(例如文件包含)访问文件。chmod -R a-x