python – 验证Django中的已上传文件

我正在工作的Django应用程序有一个事件模型。事件可能有相关的照片,静态html文件和pdf文件。

我想允许受信任的用户上传这些文件,但我对安全性感到警惕,特别是阅读了以下in the Django docs(链接)。

Note that whenever you deal with
uploaded files, you should pay close
attention to where you’re uploading
them and what type of files they are,
to avoid security holes. Validate all
uploaded files so that you’re sure the
files are what you think they are. For
example, if you blindly let somebody
upload files, without validation, to a
directory that’s within your Web
server’s document root, then somebody
could upload a CGI or PHP script and
execute that script by visiting its
URL on your site. Don’t allow that.

如何验证不同类型的文件?我有兴趣听到任何人处理这种事情的经验,或链接进一步阅读。我有一个直觉,html文件可能是太冒险,在这种情况下,我将限制上传权限给管理员。

所有的答案都集中在验证文件。这是不可能的。

Django开发人员并不要求您验证文件是否可以作为cgi文件执行。他们只是告诉你不要把它们放在一个被处死的地方。

你应该将Django的所有东西放在一个特殊的Django目录中。那个Django代码目录不应该包含静态内容。不要将用户文件放在Django源代码库中。

如果您使用Apache2,请查看基本的cgi教程:http://httpd.apache.org/docs/2.0/howto/cgi.html

可以设置Apache2来运行ScriptAlias文件夹中的任何文件。不要将用户文件放在/ cgi-bin /或/usr/local/apache2 / cgi-bin /文件夹中。

Apache2可能设置为服务器cgi文件,具体取决于AddHandler cgi脚本设置。不要让用户提交带.cgi或.pl扩展名的文件。

但是,您需要清理用户提交的文件,以便在其他客户端的计算机上运行安全。提交的HTML对其他用户是不安全的。它不会伤害你的服务器。您的服务器将只是向任何请求者吐出来。获取一个HTML消毒剂。

此外,SVG可能不安全。过去有错误。 SVG是一个带有javascript的XML文档,因此可能是恶意的。

PDF是…棘手的您可以将其转换为图像(如果您真的需要),或提供图像预览(并让用户自行下载风险),但对于尝试使用它的人来说,这将是一种痛苦。

考虑可以的文件的白名单。嵌入在gif,jpeg或png文件中的病毒将看起来像是损坏的图片(或无法显示)。如果您想要偏执,请使用PIL将它们全部转换为标准格式(您也可以检查大小)。消毒的HTML应该是OK的(剥离脚本标签不是火箭科学)。如果消毒是吸吮循环(或者您只是谨慎),您可以将其放在单独的服务器上,我猜。

http://stackoverflow.com/questions/1745743/validating-uploaded-files-in-django

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 验证Django中的已上传文件