- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我只是想确认我正在做的事情实际上是安全的。
首先,我有一个 GoDaddy 共享主机帐户,但我有一个专用 IP 地址。
让我们称我的服务器路径为 /path
。
我网站的文件位于 /path/mysite
当用户上传文件时,我将其移动到 /path/uploads/file_name
。
某人不可能通过 URL 访问该文件夹。
要添加,我在 /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);
据我所知,任何人上传的文件都不可能在我的服务器上运行,但我可能是错的。
是否有任何我需要注意的安全漏洞?
最佳答案
首先,您不需要 allow from 1.1.1.1
因为这将允许您通过 Apache 服务访问此目录。不,您只能从正在执行的程序/脚本访问此目录。
其次,这是解决此类问题的非常标准的模板。因此,它非常值得一看并被广泛使用的软件包(如 MediaWiki)或 BB 引擎(如 phpBB)采用这种方法并反射(reflect)了他们的一些安全检查。
我的第三个建议采纳了 Marc B 提出的观点,您需要考虑对您想要允许/支持的文件名和文件类型的限制,以及其他攻击的可能性。一种方法是简单地使用文件名和升序 ID 存储文件,并将 ID/用户文件名作为映射保存在数据库表中。您还需要不仅考虑对您的服务器的攻击,还需要考虑恶意用户可以使用此上传工具来实现 XSS和其他攻击。
关于PHP文件上传/下载安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044085/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!