【发布时间】:2011-11-26 21:44:19
【问题描述】:
如果我让用户插入指向他们自己主机图像的链接,我是否需要防止任何类型的安全问题?
为了更好地解释,<img src="somedomain/somefile"/> 在哪种情况下会使我的网站易受攻击?
【问题讨论】:
-
让您的网站易受攻击,或访问者查看您的网站?
如果我让用户插入指向他们自己主机图像的链接,我是否需要防止任何类型的安全问题?
为了更好地解释,<img src="somedomain/somefile"/> 在哪种情况下会使我的网站易受攻击?
【问题讨论】:
允许任意图像 URL 的一个潜在问题是图像的主机可以跟踪所有视图和 IP 地址。在一个流量很少的论坛中,可以将图像主机置于识别特定用户 IP 地址的位置。
另一个是您无法控制图像中显示的内容。图像资源可以是动态的,并且在任何给定时间向任何用户显示几乎任何内容。
然后,图像利用访问者浏览器或图像库中的漏洞的风险非常小。但这些非常很少见,而且很可能会很快得到修补 - 我自己只知道 one instance 这种情况发生的规模更大。
Stack Overflow 具有巨大的影响力,而且流量仍然允许使用外部图像 - 我倾向于从中推断出风险在一定程度上是可控的。
不过,如果您想真正确定,最好先获取图像资源,使用图像库复制它(以确保它是真实图像并去除任何敏感元数据),然后将其存储在您的服务器。
【讨论】:
此外,如果您在标记中插入简单的字符串,则有人可以关闭图像标签并启动脚本标签或类似的东西。因此,您应该注意用户设置此类图像src 属性的任何形式的脚本注入。
例如,如果图像src 设置为这样:
myimagefile.jpg" /><script> ... </script>
您可以看到这将如何完全摆脱图像选项卡并开始在脚本标记中执行其他操作。在保存并开始在实时页面上写出之前,您需要确保他们输入的内容实际指向图像。
这种类型的脚本注入可以例如从页面上的表单中读取(可能包括个人信息、登录详细信息或会话 ID),然后使用 jsonp 将最终用户信息发送回一些不良黑客数据收集点。
【讨论】:
htmlentities() 很重要
myimagefile.jpg" onload=alert(1) a=" 更好,因为它不需要尖括号。 ;)