2009-09-08 101 views
2

我构建了一个使用Paperclip并使用validates_attachment_content_type验证内容类型的照片库。在Ruby On Rails上安全文件上传

该应用程序在带有Passenger的共享主机上运行。

是否可以绕过验证并从public/pictures目录运行恶意脚本?如果是这样,有什么我可以做的,以避免恶意脚本运行或上传?

回答

5

是否可以绕过验证并从public/pictures目录运行恶意脚本?

是的。您可以拥有一个完全有效的可渲染图像文件,其中还包含带脚本注入的HTML。感谢嗅探内容,IE,你毁了一切。

请参阅http://webblaze.cs.berkeley.edu/2009/content-sniffing/的摘要。

如果是这样,有什么我可以做,以避免邪恶脚本运行或上传?

不是。理论上,您可以检查HTML标签的前256个字节,但是您必须知道浏览器内容的确切细节 - 嗅探并保持全面且最新的内容为非启动器。

如果您正在处理图像并自行重新保存以保护您。否则,做一个或两个:

  • 只有从不同的主机名服务于用户上传的文件,所以他们不能访问到cookie/AUTH细节,将允许注入脚本XSS到您的网站。 (但要注意非XSS类攻击,如一般的JavaScript /插件攻击)

  • 通过包含'Content-Disposition:attachment'头的服务器端脚本来提供用户上传的文件,因此浏览器不会尝试内联查看页面。 (但要注意Flash的旧版本忽略Flash文件)这种方法也意味着您不必将文件存储在服务器文件系统下的用户提交的文件名下,这可以为您节省一些沉重且难以获取的文件,对文件名验证工作。

+0

如果您正在调整图像大小(通过ImageMagick),HTML +脚本将“生存”更改吗? – 2009-09-08 14:00:41

+2

不,压缩流中的任何字节将被重新压缩并丢失。在制作较小版本的图像时,任何其他结构(例如注释字段)都应该被无效地丢弃。理论上,如果您事先知道确切的大小调整设置,则可能可以制作一个图像,在调整大小和压缩大小后,最终会在结果流中显示类似HTML的字节,但这可能是非常非常困难的攻击,可能实际上很不可行。我当然从来没有听说过它发生。 – bobince 2009-09-08 15:58:00