我构建了一个使用Paperclip的照片库,并使用validates_attachment_content_type验证内容类型。
应用程序在Passenger的共享主机上运行。
是否可以绕过验证并从public / pictures目录运行恶意脚本?如果是这样,我可以做些什么来避免恶意脚本运行或上传?
答案 0 :(得分: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文件)这种方法也意味着你不必在用户提交的文件名下存储服务器文件系统上的文件,这可以节省一些沉重和难以获得的文件 - 正确的文件名验证工作。