【问题标题】:Secure File Upload in Ruby On RailsRuby On Rails 中的安全文件上传
【发布时间】:2010-11-26 11:35:29
【问题描述】:

我建立了一个使用 Paperclip 并使用 validates_attachment_content_type 验证内容类型的照片库。

应用程序在与Passenger 共享的主机上运行。

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

【问题讨论】:

    标签: ruby-on-rails security upload paperclip


    【解决方案1】:

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

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

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

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

    不是真的。从理论上讲,您可以检查 HTML 标记的前 256 个字节,但是您必须知道浏览器内容嗅探的确切细节,并且保持全面和最新是不可能的。

    如果您正在处理图像并自己重新保存它们可以保护您。否则,请执行以下一项或两项操作:

    • 仅提供来自不同主机名的用户上传文件,因此他们无权访问允许注入脚本 XSS 进入您的站点的 cookie/auth 详细信息。 (但要注意非 XSS 攻击,例如一般的 JavaScript/插件漏洞)

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

    【讨论】:

    • 如果您正在调整图像大小(通过 ImageMagick),HTML + 脚本会“幸存”更改吗?
    • 不,压缩流中的任何字节都会被重新压缩并丢失。在制作较小版本的图像时,通常应丢弃任何其他结构(例如评论字段)。从理论上讲,如果您事先知道确切的调整大小设置,您可能能够制作一个图像,当调整大小和压缩时,最终会在结果流中生成类似 HTML 的字节,但这将是一个非常非常困难的攻击,可能实际上完全不可行。我当然从未听说过这种情况。
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 2010-11-25
    • 2012-07-05
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2011-06-24
    相关资源
    最近更新 更多