【问题标题】:Access control for static resources静态资源的访问控制
【发布时间】:2012-02-10 04:26:10
【问题描述】:

在我的应用程序中,我有时会生成一张新图片。在阅读 cmets here 之后,我决定将图片存储在文件系统中,并将元数据存储在数据库中,所以现在我的文件独立于数据库静态提供(bd 为用户提供了他们想要访问的文件名,然后他们从静态文件服务器中提取)。

但是,我在这里遇到的问题是,我并不总是希望用户看到其他用户生成的图片。例如,假设用户 Joe 创建了图片 A 和 B,而用户 Sue 创建了 C 和 D。我不希望 Joe 能够看到 C 和 D,我也不希望 Sue 看到 A 和 B。因为所有文件是静态服务的,如果乔碰巧猜到了 C 的 url,他就可以访问它。

由于提供图片的方式几乎无法控制我的 django,我不确定这里的解决方案是什么,除了加密文件(这是复杂且资源密集型的)

【问题讨论】:

标签: mysql database django apache data-management


【解决方案1】:

简单的方法是使用 django send_file[1] 来完成。这很容易实现,但不能很好地扩展。我用它来提供动态生成的报告。这个方案唯一的好处就是都是python代码。

更好的方法是使用 sanmai 链接上的信息。您也可以在这里查看:http://www.sensibledevelopment.com/2010/11/django-sendfile-an-for-abstraction-large-file-serving-in-django/ 了解一些 django 特定信息。

1:http://djangosnippets.org/snippets/101/

【讨论】:

    【解决方案2】:

    使用某个属性的一个或多个 MD5 hexdigest 作为图像路径的一部分;路径将非常随机。

    【讨论】: