Django文件上传输入验证与安全性

4 投票
2 回答
4227 浏览
提问于 2025-04-15 12:44

我正在创建一个非常简单的Django文件上传应用,但我想尽可能地让它安全。这个应用是单向的,也就是说,任何上传文件的人都不需要再去取回这些文件。目前我已经做了以下几件事:

  1. 禁止某些文件扩展名(比如 .php、.html、.py、.rb、.pl、.cgi、.htaccess 等)
  2. 设置了文件大小的上限和文件名字符长度的限制。
  3. 对文件上传的目录进行了密码保护(使用 .htaccess 文件,并且这个文件的拥有者是 root,这样网络服务器就无法覆盖它)

假设 Apache 和 mod_python 在前端,并且 Apache 本身也已经做好了安全设置,还有没有其他“最佳实践”我应该做的或考虑的,以保护我的应用呢?

提前谢谢你。

2 个回答

2

另外,你可能想把目标文件放在Apache的DocumentRoot目录之外,这样就不会通过任何网址访问到这些文件了。虽然如果写得好的话,.htaccess文件里的规则可以提供一定的保护,但如果你想要最大程度的安全,最好把文件放在不可以通过网页访问的地方。

7

禁止某种文件扩展名其实可能是浪费时间。因为在Unix服务器上,文件的扩展名并不重要,重要的是文件的拥有者和权限。

当你接受文件上传时,通常会把文件重命名,以防止它被滥用。上传的文件可以简单命名为“upload_xxx”,其中“xxx”是一个关键字,用来对应某个数据库记录,这样可以提供上传文件的名称和数据类型。

你需要实际读取文件,确认文件的内容和上传者所说的一致。

举个例子,如果他们声称上传的是一个.JPG文件,你就得实际打开这个文件,确保它真的是JPEG格式,而不是.EXE格式。

撰写回答