Django 安全用户到本地系统目录映射

Posted

技术标签:

【中文标题】Django 安全用户到本地系统目录映射【英文标题】:Django secure user to local system directory mapping 【发布时间】:2015-04-07 05:11:29 【问题描述】:

我有一个问题,我必须让登录用户从指定路径安全地访问本地目录内容。 /DjangoApp/media/user1 即,当 user1 登录时,他们应该只能从 /DjangoApp/media/user1 访问内容

我目前的观点是:

def get_absolute_pathname(pathname='', safe=True):
if not pathname:
    return os.path.join(MEDIA_ROOT, 'index')
if safe and '..' in pathname.split(os.path.sep):
    return get_absolute_pathname(pathname='')
return os.path.join(MEDIA_ROOT, pathname)       


@login_required
def retrieve_path(request, document_root,  pathname=''):
pathname = None
if request.user.is_authenticated():
  pathname = request.user.get_username()
  abs_pathname = get_absolute_pathname(pathname)
  url = document_root
  response = HttpResponseRedirect(url)
  return response

当前网址是:

    url(regex  = r'^%s(?P<path>.*)$' % settings.STATIC_URL[1:], 
view   = 'django.views.static.serve', 
kwargs =  'document_root': '/home/www/abc/DjangoProject/media/',
          'show_indexes' : True),
     url(r'^user1/(?P<pathname>.*)$', 'logd.views.retrieve_path', 
        'document_root': 'http://127.0.0.1:8000/DjangoApp/static/user1',
    ),     
     url(r'^user2/(?P<pathname>.*)$', 'logd.views.retrieve_path', 
        'document_root': 'http://127.0.0.1:8000/DjangoApp/static/user2',
    ),
     url(r'^user3/(?P<pathname>.*)$', 'logd.views.retrieve_path', 
        'document_root': 'http://127.0.0.1:8000/DjangoApp/static/user3',
    ),
     url(r'^user4/(?P<pathname>.*)$', 'logd.views.retrieve_path', 
        'document_root': 'http://127.0.0.1:8000/DjangoApp/static/user4',
    ), 

我可以直接从 url 访问http://127.0.0.1:8000/DjangoApp/static/。但我想限制访问。

我做错了什么以及如何使访问经过身份验证并且仅限于固定路径?

谢谢

【问题讨论】:

请参考这个问题,这样会有一些想法***.com/questions/28007770/… @RajaSimon 我的实现是类似的。但正如您在评论中提到的,任何登录用户都可以通过更改 url 来访问所有数据。即,通过将 user1 更改为 user2。有没有办法限制 user1 只能访问名为 user1 的目录。 等一下我会更新.. 我用更安全的文件服务更新了我的答案...只有登录的用户才能访问他们的文件...请查看并给予积分...。 谢谢@RajaSimon 成功了 【参考方案1】:

安全的媒体文件不被匿名用户提供更好的 url 保护...

使用@login_requireddef protected_serve(request, path, document_root=None): 可以保护它..

欲了解更多信息@987654321@

【讨论】:

以上是关于Django 安全用户到本地系统目录映射的主要内容,如果未能解决你的问题,请参考以下文章

sshfs通过ssh挂载远程目录到本地

NFS服务的用户身份映射

nginx做本地目录映射

Linux运维之NFS网络文件系统功能介绍及应用场景

是否有本地化安全的方法来获取 SYSTEM 帐户的 AppData 目录?

django 路由系统