代码之家  ›  专栏  ›  技术社区  ›  collimarco

RubyonRails中的安全文件上传

  •  2
  • collimarco  · 技术社区  · 16 年前

    我建立了一个照片库,它使用回形针并使用validates_attachment_content_type验证内容类型。

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

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

    1 回复  |  直到 16 年前
        1
  •  5
  •   bobince    16 年前

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

    看见 http://webblaze.cs.berkeley.edu/2009/content-sniffing/ 作为总结。

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

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

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

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