我一直在做一些关于使用Django访问控制的文件下载的研究。我的目标是完全阻止对文件的访问,除非由特定用户访问。我读过使用Django时,X-Sendfile是实现这一点的方法之一(基于其他SO问题等)。我对在Django中使用X-Sendfile的基本理解是:
- 用户请求URI以获取受保护的文件
- Django应用程序根据URL决定返回哪个文件,并检查用户权限等
- Django app返回一个HTTP响应,将“X-Sendfile”头设置为服务器的文件路径
- web服务器找到文件并将其返回给请求者(我假设web服务器也会一路去掉“X-Sendfile”头)
与直接从Django中丢弃文件相比,X-Sendfile似乎是实现受保护下载的更有效方法(因为我可以依赖Nginx提供文件,而不是Django),但留给我两个问题:
- 我对X-Sendfile的解释至少在抽象上是正确的吗?
- 如果我不提供对存储文件的目录的常规前端HTTP访问(例如http://www.example.com/downloads/secret-file.jpg),它真的安全吗(即,不要将它保存在我的
public_html
目录中)?或者,精通技术的用户是否可以检查标题等,并反向工程访问文件(然后分发)的方法? - 在表现上真的有很大的不同吗。我是打算通过直接从Django提供8b的150Mb文件分块下载来让我的应用服务器崩溃呢,还是说这不是问题?我问的原因是,如果两个版本几乎相等,Django版本会更好,因为我可以用Python做一些事情,比如记录已完成下载的数量、记录下载的带宽等等
提前谢谢。
Tags:
记住发送nginx的X-Accel-Redirect头而不是X-Sendfile。 有关详细信息,请参见http://wiki.nginx.org/XSendfile。
相关问题 更多 >
编程相关推荐