跳转到主要内容

Django存储类,为所有存储文件分配随机文件名。

项目描述

https://badge.fury.io/py/django-random-filestorage.png https://travis-ci.org/erikr/django-random-filestorage.png?branch=master https://coveralls.io/repos/erikr/django-random-filestorage/badge.png?branch=master

Django-random-filestorage是一个Django存储类,为所有存储文件分配随机文件名。

如果用户上传一个名为foo.txt的文件,它将被存储为<60个随机字符>.txt。在您直接引用上传的文件或图片的情况下,这可以防止他们通过猜测用户使用的原始名称来找到其他文件,而这些文件他们可能没有权限查看。

文档

完整文档在https://django-random-filestorage.readthedocs.org

安全警告

快速入门

安装django-random-filestorage

pip install django-random-filestorage

然后在您的整个Django项目中使用它

DEFAULT_FILE_STORAGE="randomfilestorage.storage.RandomFileSystemStorage"

或者,在特定字段上设置它

from randomfilestorage.storage import RandomFileSystemStorage

random_storage = RandomFileSystemStorage(location='/media/my_files')
class Example(models.Model):
    my_file = FileField(storage=random_storage)

你为什么要这样做呢?

假设您有一个应用程序管理您商店销售的冰淇淋配方。其中一些配方包含秘密成分,因此只对一小部分受信任的用户可用。我们将看看两种冰淇淋:草莓,它的配方相当标准且不保密,和海蜇,它的配方非常保密。

菜谱存储在PDF文件中,这些文件通过Django应用中的FileField上传。正如Django建议的那样,媒体目录可以通过nginx或其他简单的Web服务器直接访问。因此,有权查看草莓菜谱的用户将被发送到类似以下链接的PDF:http://example.com/media/recipes/strawberry.pdf。他们不会在菜谱列表中看到水母,因为它太保密了。

然而,鉴于用户知道你还在卖水母,他们可以简单地通过以下链接找到那个菜谱:http://example.com/media/recipes/jellyfish.pdf!有很多情况下,不同访问级别的文档名称在某种程度上是可以预测的。日期也是另一个可预测的例子。FileField中的文件名是从用户选择的原始文件名派生出来的。

通过使这些文件名随机,可以访问http://example.com/media/recipes/ZXcAoL4wmhisYlBvHLoyt3fwfMXsMiVvgQTQOb40zOQIdag7KbEU5sy9b6GW.pdf的人将无法猜测水母菜谱可在http://example.com/media/recipes/qPRCEVAJd1RQvkd9OTTeY4hruW0Jvy5Qq0YIVtWPrwGWMgmUogYO8aPVRCxC.pdf找到。

哪些问题没有解决?

一旦用户知道了用于命名文件的随机字符串,他们可以将其链接提供给其他人。同样,他们也可以下载文件并以其他方式将其提供给其他人。

如果您想更严格地控制谁可以访问某些文件,您必须防止直接访问(媒体目录的)部分。您可以通过Django视图来提供这些文件,但这会增加额外的性能成本。一个更高效但更复杂的替代方案是使用Apache sendfile 或 nginx X-accel

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-random-filestorage-0.1.0.tar.gz (5.9 kB 查看哈希值)

上传时间

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面