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