PDF使用Rails上传恶意内容漏洞

时间:2016-12-02 17:11:38

标签: ruby-on-rails security pdf file-upload carrierwave

我正在使用Carrierwave和Rails 4实现pdf上传。客户问我恶意内容,例如如果有人试图上传被屏蔽为pdf的恶意文件。我将限制前端的文件类型为'application / pdf'。假设上传的文件有.pdf扩展名吗?还有什么我需要担心的吗?

2 个答案:

答案 0 :(得分:3)

文件上传通常是一个安全问题,因为有很多方法可以解决它。关于将恶意文件屏蔽为PDF的问题,检查内容类型(application/pdf)是好的,但还不够,因为它由客户端控制并且可以修改。

  • 绝对建议过滤.pdf扩展程序,但请确保您不接受virus.pdf.exe等文件。
  • 存在其他文件名攻击技术,例如涉及空值或控制字符。
  • 考虑使用文件类型检测器来确定该文件确实是PDF文档。

但这只是为了限制文件类型。接受文件上传时,您还需要注意许多其他问题。

  • PDF文件可能包含恶意代码,是常见的攻击媒介。
  • 确保上传的文件已写入服务器上的相应目录。如果它们不能公开访问,请选择Web根目录之外的目录。
  • 限制最大上传文件大小。

这不是一个完整的清单。有关详细信息,请查看OWASP的Unrestricted File Upload漏洞。

答案 1 :(得分:1)

另外对@StefanOS的好答案,PDF文件需要以字符串开头:

  %PDF-[VERSION]

通常,至少通常,前几个字节(或更多)表示文件类型 - 特别是对于可执行文件(即,Windows可执行文件,称为PE文件,应该启动 - 如果内存服务 - 使用“MZ “)。

对于上传的PDF文件,打开上传的文件并读取前5个字节应始终产生%PDF-

这可能是一个足够好的验证。对于大多数用例。