我建立了一个使用 Paperclip 并使用 validates_attachment_content_type 验证内容类型的照片库。
该应用程序在与Passenger 共享的主机上运行。
是否可以绕过验证并从 public/pictures 目录运行恶意脚本?如果是这样,我可以做些什么来避免运行或上传恶意脚本?
我建立了一个使用 Paperclip 并使用 validates_attachment_content_type 验证内容类型的照片库。
该应用程序在与Passenger 共享的主机上运行。
是否可以绕过验证并从 public/pictures 目录运行恶意脚本?如果是这样,我可以做些什么来避免运行或上传恶意脚本?
是否可以绕过验证并从 public/pictures 目录运行恶意脚本?
是的。您可以拥有一个完全有效的可渲染图像文件,该文件还包含带有脚本注入的 HTML。谢谢你的虚假内容嗅探,IE,你毁了一切。
有关摘要,请参见http://webblaze.cs.berkeley.edu/2009/content-sniffing/。
如果是这样,我可以做些什么来避免运行或上传恶意脚本?
并不真地。从理论上讲,您可以检查 HTML 标记的前 256 个字节,但是您必须知道浏览器内容嗅探的确切细节,并且保持全面和最新是不可能的。
如果您正在处理图像并自己重新保存它们可以保护您。否则,请执行以下一项或两项操作:
仅提供来自不同主机名的用户上传文件,因此他们无权访问允许注入脚本 XSS 进入您的站点的 cookie/auth 详细信息。(但要注意非 XSS 攻击,例如一般 JavaScript/插件漏洞)
通过包含“Content-Disposition:附件”标头的服务器端脚本提供用户上传的文件,因此浏览器不会尝试内联查看页面。(但请注意旧版本的 Flash 忽略 Flash 文件)这种方法还意味着您不必以用户提交的文件名将文件存储在服务器文件系统上,这为您节省了一些繁重且难以获取的内容-正确的文件名验证工作。