安全地从目录中获取GET请求中的文件

时间:2012-11-11 10:04:17

标签: python django security

我想创建一个自己的静态文件视图,该视图返回GET请求中定义的文件。文件必须位于额外目录中。该网址必须与/e?s=NAME_OF_FILE类似。我的问题是,黑客可以像/e?s=/PATH/TO/DATABASE一样使用它从服务器获取任何文件。我已经有了解决方法,但我认为有更好的解决方案。

我的代码:

path = os.path.abspath(os.path.join(script_path, filename))
if path.startswith(script_path):
    # Good
else:
    # Bad

这是针对“隐藏的静态文件”,不应由服务器处理。

1 个答案:

答案 0 :(得分:3)

你在做什么并没有多大帮助。你可以做的一些事情 -

  1. 在网络服务器中关闭目录列表,以便“黑客”无法获取该目录中所有文件的列表。
  2. 不是将实际文件名暴露给外界,而是可以获取文件名,生成具有此文件名的MD5,将此映射存储在服务器中的某个位置,并将此MD5作为文件名公开。所以它变成了/e?s=MD5_HASH_OF_FILENAME。这样做会让“黑客”极难“猜测”文件名。蛮力无济于事,因为MD5不易猜测。因此,实际上,只有那些已经发送此URL的人才能访问它。
  3. 您可以将此静态文件查看API仅公布给经过身份验证的用户,而不是将其设为公共API。您可以使用@login_required装饰器。
  4. 最后,在您的网络服务器上启用HTTPS。