【发布时间】:2011-10-06 17:17:08
【问题描述】:
我正在创建一个文件共享网站,类似于 Megaupload 或 Rapidshare。就像提到的那些网站一样,我需要允许任何文件类型。
我正在考虑一个解决方案,并且需要知道它是否存在任何安全风险,或者是否有更好的解决方案来解决我的问题?
- 用户上传文件
- 检查文件大小,如果低于 100mb 开始上传
- 使用 IP、时间戳和 salt 加密文件名
- 存储在无法从网络访问的目录中
- 在数据库中存储文件名、描述和散列文件名
上传完成。现在下载:
- 用户请求下载
- 连接数据库,定位文件 ID
- 如果找到文件 ID,则从文件服务器位置复制文件并准备文件传输
请务必注意,任何东西都不能在服务器上运行。因此用户无法上传恶意文件并对服务器发起攻击。请求文件时,它将立即启动下载,并且永远不会运行。
现在,考虑到上述情况,上述模型中是否存在任何可能允许恶意用户攻击服务器的缺陷?
为了回答这个问题,假设网站的其余部分是安全的。
【问题讨论】:
-
如果没有任何东西可以实际尝试执行已上传的文件,那么答案是 - 是的,您的模型是安全的。
-
@stereofrog 为什么?这里有 PHP 做不到,或者做不好的地方吗?我真的没看到
-
@stereofrog that 确实是个问题,真的。虽然有解决方案(X-Sendfile 是其中之一)。出于好奇,可以在 Linux/Apache 堆栈上运行的任何其他大型脚本语言是否以更好的方式解决了这个问题? Perl/Python/Ruby? (如果你碰巧知道)
标签: php