1

我想创建一个自己的静态文件视图,该视图返回 GET 请求中定义的文件。该文件必须位于额外的目录中。URL 必须像/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

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

4

1 回答 1

3

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

  1. 在网络服务器中关闭目录列表,这样“黑客”就不会获得该目录中所有文件的列表。
  2. 您可以获取文件名,而不是将实际文件名暴露给外部世界,生成该文件名的 MD5,将此映射存储在您的服务器中的某处并将此 MD5 作为文件名公开。于是就变成了/e?s=MD5_HASH_OF_FILENAME。这样做会使“黑客”很难“猜测”文件名。蛮力无济于事,因为 MD5 不容易猜到。因此,实际上,只有知道如何发送此 URL 的人才能访问它。
  3. 您可以将此静态文件查看 API 公开给仅经过身份验证的用户,而不是将其设为公共 API。您可以使用@login_required装饰器。
  4. 最后,在您的网络服务器上启用 HTTPS。
于 2012-11-11T10:10:50.183 回答