在Django中限制对私人文件下载的访问

减少

我的django应用程序中有多个FileField,它们可以属于不同的用户。我正在寻找一种很好的方法来限制不是文件所有者的用户对文件的访问。

实现此目标的最佳方法是什么?有任何想法吗?

塞拉菲姆

不幸的是,由于django并非旨在提供文件服务,因此@Mikko的解决方案实际上无法在生产环境中运行在生产环境中,文件需要由HTTP服务器(例如apache,nginx等)提供服务,而不是由应用程序/ Django服务器(例如uwsgi,gunicorn,mod_wsgi等)提供服务。

这就是为什么限制文件访问权限不是那么容易的原因:HTTP服务器需要一种方法来询问应用程序服务器是否可以将文件提供给请求它的特定用户。如您所知,这需要同时修改您的应用程序http服务器。

解决上述问题的最佳方法是django-sendfile(https://github.com/johnsensible/django-sendfile),它使用X-SendFile机制来实现上述目的。我从项目的描述中复制:

这是将文件发送到Web客户端的Web服务器特定方法的包装。当Django需要检查与权限相关的文件,但又不想提供文件本身的实际字节时,这很有用。即作为服务大文件不是Django的目的。

要了解有关senfile机制的更多信息,请阅读以下答案:Django-了解X-Sendfile

2018更新:请注意,django-sendfile似乎不再被维护; 也许它应该仍然可以正常工作,但是,如果您想使用功能类似的更现代的软件包,参阅https://github.com/edoburu/django-private-storage,就像评论者@ surfer190所建议的那样。尤其要确保您实现“优化大文件传输”部分;实际上,您不仅所有大型文件都需要此传输。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在plone 4.3中限制对私人文件/文件夹的访问

如何检查IPFS中的私人文件

DDEV Drupal环境中的私人文件

Codeigniter中的私人文件夹

DDEV Drupal环境中的私人文件

CKFinder中的私人文件夹

在HTML页面中获取私人文件或显示私人图像

无法访问web2py中的私人文件夹

如何使用 Laravel 从我的应用程序中的私人文件夹中存储和访问图像?

如何从Webview将图像下载到自定义/私人文件夹,而不是Android中的“下载”文件夹

为在Google云端硬盘中上传的私人文件生成可下载的链接

使用 Laravel 处理私人文件

我们可以在iOS的Google云端硬盘中访问私人文档吗?

如何在View内部显示私人文件夹中的图像?

流星-下载pdf文件/限制访问文件

如何将私人文件迁移到 azure 以便未经身份验证的人无法访问?

Android 11 - 访问私人存储中的文件

创建一个新的私人文件夹

在 S3 中存儲高度敏感/私人文件的最安全選項是什麼?

限制对Django中对象的访问

限制Java中的文件访问

在 Django 中安排文件下载

我可以使用免费帐户拥有带有私人文件的公共仓库吗?

如何使用Intent.ACTION_VIEW打开保存到内部存储器的私人文件?

Android:使用第三方应用程序打开私人文件

通过电子邮件在Android中发送私人文件

在 Django 中限制未经授权的访问

如何从 root 访问下载中的文件?

限制Ubuntu中的文件夹访问