我只是想确认我所做的事实上是安全的。
首先,我有一个GoDaddy共享主机帐户,但我有一个专用的IP地址。
让我们调用我的服务器路径/path
我的网站文件位于/path/mysite
当用户上传文件时,我会将其移至/path/uploads/file_name
某人无法通过网址访问该文件夹
要添加,我在/path/uploads
中有一个.htaccess文件,其中包含以下内容:
order deny,allow
deny from all
allow from 1.1.1.1 #let's say 1.1.1.1 is my server's IP address.
然后要真正开始下载该文件,我的用户将会看到指向mysite.com/file.php?q=[file_id]
的链接
在file.php
中,我这样下载:
$mime = mime_content_type($location);
header('Content-disposition: attachment; filename='.$name);
header('Content-type: '.$mime);
readfile($location);
据我所知,任何人上传的文件都不可能在我的服务器上运行,但我可能错了。
我需要处理哪些安全漏洞?
答案 0 :(得分:1)
首先,您不需要allow from 1.1.1.1
,因为这将允许您通过Apache服务访问此目录。不,您只能从正在执行的程序/脚本访问此目录。
其次,这是解决此类问题的非常标准的模板。因此,值得一看且广泛使用的软件包,如MediaWiki或BB引擎(如phpBB)接近此并反映其安全检查。
我的第三个建议提到了Marc B提出的观点,你需要考虑对你想要/支持的文件名和文件类型的限制,以及其他攻击的可能性。一种方法是简单地存储具有文件名和升序ID的文件,并将ID /用户文件名保存为DB表中的映射。您还需要考虑对服务器的攻击,但恶意用户可以使用此上传工具来实施XSS和其他攻击。
答案 1 :(得分:-1)
您可以使用
完全禁用该目录的PHP解释器php_flag引擎关闭
在.htaccess中。这应该可以为您在 目录中运行的内容提供很好的保护。
但是,你没有显示你的上传代码,因此很难说你在那里做了什么:你真的想检查一下你是否容易受到路径遍历的攻击,因为这样会完全取消你的保护。
下载代码也可能容易受到攻击:如果您实际使用的是您发布的代码段,攻击者只需使用“../../whatever.php”作为文件名即可下载应用程序中的任何文件(再次,路径遍历)。或者将该脚本用作praxy等等 - 因此您需要确保验证文件名值。