Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
Python Django文件上载输入验证和安全性_Python_Django_Security_File Upload - Fatal编程技术网

Python Django文件上载输入验证和安全性

Python Django文件上载输入验证和安全性,python,django,security,file-upload,Python,Django,Security,File Upload,我正在创建一个非常简单的django上传应用程序,但我想让它尽可能安全。这是一个完全单向的应用程序,即任何上传文件的人都不必检索它。到目前为止,我已经完成了以下工作: 不允许某些文件扩展名(.php、.html、.py、.rb、.pl、.cgi、.htaccess等) 设置最大文件大小限制和文件名字符长度限制 受密码保护的文件上载到的目录(root拥有.htaccess,因此web服务器不可能覆盖它) 假设Apache和MyDyPython在这个前端,Apache本身已经被保护了,还有什么其他的

我正在创建一个非常简单的django上传应用程序,但我想让它尽可能安全。这是一个完全单向的应用程序,即任何上传文件的人都不必检索它。到目前为止,我已经完成了以下工作:

  • 不允许某些文件扩展名(.php、.html、.py、.rb、.pl、.cgi、.htaccess等)
  • 设置最大文件大小限制和文件名字符长度限制
  • 受密码保护的文件上载到的目录(root拥有.htaccess,因此web服务器不可能覆盖它)
  • 假设Apache和MyDyPython在这个前端,Apache本身已经被保护了,还有什么其他的“最佳实践”我应该做还是考虑保护我的应用?


    提前感谢。

    禁止文件扩展名可能是浪费时间。unix服务器不使用扩展--它使用所有权和权限

    在接受上载时,您通常会重命名该文件以防止其被误用。上传的文件应简单地命名为“upload_xxx”,其中“xxx”是提供声明名称和数据类型的某些数据库记录的键

    您必须实际阅读该文件,并确认该文件的内容是某人声称的内容


    例如,如果他们声称上载.JPG,您必须实际读取该文件以确保它是JPEG,而不是.EXE。

    此外,您可能希望将目标文件放在Apache的DocumentRoot目录之外,以便任何URL都无法访问它们。如果.htaccess中的规则编写得很好,则可以提供一定程度的保护,但如果您希望获得最大的安全性,请将文件放在web可访问目录之外。

    感谢您提供的信息,这是验证文件类型的一个好方法。不允许扩展的原因不一定是不允许特定的文件类型,而是要确保如果用户以某种方式通过apache访问该文件,apache本身不会尝试执行该文件。如果他们上传一个.php脚本,然后浏览到,apache会像运行普通php页面一样运行该.php脚本。