在Django中防范恶意PNG

时间:2019-04-08 02:04:08

标签: django security nginx

我在Django网站上发现了以下安全通知:

  

以不遵循安全最佳实践的方式提供媒体时,Django的媒体上传处理会带来一些漏洞。具体来说,如果HTML文件包含有效的PNG标头和恶意HTML,则该HTML文件可以作为图像上传。该文件将通过Django用于ImageField图像处理的库的验证(枕头)。随后将此文件显示给用户时,根据您的Web服务器的类型和配置,它可能会显示为HTML。

不幸的是,没有其他信息可以保护恶意PNG的网站,所以我有一些疑问:

  1. 我应该如何配置我的Web服务器(nginx)?
  2. 我如何才能将html生成为PNG并上传到服务器上,并确保它不会显示为html?
  3. 我应该在上传时添加其他图像检查吗,什么是最好的解决方案/库(可能是libmagick)?

1 个答案:

答案 0 :(得分:1)

根据Django Docs

  

在框架级别上没有防弹技术解决方案可以安全地验证所有用户上传的文件内容,但是,您可以采取一些其他步骤来减轻这些攻击:

     
      
  1. 始终提供来自不同顶级域或第二级域的用户上载内容,可以防止一类攻击。这样可以防止任何由同源策略保护(例如跨站点脚本)阻止的漏洞利用。例如,如果您的网站在example.com上运行,则需要从诸如usercontent-example.com之类的网站上载上载的内容(MEDIA_URL设置)。仅提供来自诸如usercontent.example.com之类的子域的内容。

  2.   
  3. 除此之外,应用程序可能会选择为用户上传的文件定义允许的文件扩展名白名单,并将Web服务器配置为仅提供此类文件。

  4.   

using a CDN似乎也可以解决某些类型的问题。