Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django站点中的安全静态媒体访问_Django_Apache_Authentication - Fatal编程技术网

Django站点中的安全静态媒体访问

Django站点中的安全静态媒体访问,django,apache,authentication,Django,Apache,Authentication,我正在建立一个网站,注册用户可以上传文件。然后通过Apache提供这些文件。只有登录的用户才能访问这些文件 我读过,但人们似乎必须登录两次才能访问网站和媒体,每次都使用不同类型的登录框 有没有办法解决这个问题,或者有没有其他办法限制使用Django身份验证数据库访问Apache提供的静态介质 我正在使用mod_python 编辑:在阅读了范加尔的答案后,我是如何解决这个问题的: 切换到WSGI 安装 已将所有公共媒体文件移到/media/public中的子文件夹中 添加了使用别名/media/p

我正在建立一个网站,注册用户可以上传文件。然后通过Apache提供这些文件。只有登录的用户才能访问这些文件

我读过,但人们似乎必须登录两次才能访问网站和媒体,每次都使用不同类型的登录框

有没有办法解决这个问题,或者有没有其他办法限制使用Django身份验证数据库访问Apache提供的静态介质

我正在使用mod_python

编辑:在阅读了范加尔的答案后,我是如何解决这个问题的:

  • 切换到WSGI
  • 安装
  • 已将所有公共媒体文件移到/media/public中的子文件夹中
  • 添加了使用别名/media/public/var/www../media/public访问公用文件夹的权限
  • 添加了WSGIScriptAlias/media/protected//var/www../apache/django.wsgi(与站点其余部分的处理程序相同)
  • 在上添加了XSendFile,在上添加了XSendFile ALLOWAOVOVE
  • 在Django应用程序中,我为/media/protected添加了一个urlconf,它基本上做的是,只针对我的身份验证系统进行了修改。它处理URL,例如/media/protected/GROUP_ID/file,这样只有组成员才能下载文件

  • 如果您可以自由地从Apache切换到,那么最简单的解决方案就是使用它,它将完全满足您的需要,即在通过web服务器提供实际文件的同时提供应用程序身份验证


    但是,如果您一直使用Apache,那么我建议,这里他们提到PHP,但是您可以用Python或任何其他语言生成令牌。使用mod_auth_令牌,您将能够在应用程序中生成令牌,然后让web服务器使用该令牌为静态文件提供服务。

    通常的方法是将一个特殊的头传递回web服务器

    您可以像这样使用x-accel-redirect


    对于Apache,使用模块(在Django用户邮件列表上)应该非常类似。

    Django文档中描述的方法的另一个可能问题是,它似乎使用了基本身份验证—这会以base64编码的明文发送密码,除非对所有请求都使用SSL,否则它是不安全的。我将尝试使用modxsendfile。它成功了!必须切换到WSGI,但这并不像我想象的那么难。在mod_WSGI 3.0中,您可以返回一个状态为200的位置。这些目录需要通过URL映射,然后在位置中引用URL。由于需要URL映射,为了确保远程客户端无法访问它们,如果不是Apache子请求,则需要使用mod_重写规则来禁止它们。另一个选项是使用wsgi.file_包装扩展名以最佳方式直接从Django返回文件。目前无法使用Django执行此操作,但在将来的版本中将允许使用。X-Sendfile方法的示例实现如下所示: