假设我允许用户链接到他们喜欢的任何图像。将检查链接的语法正确性、转义等,然后将其插入<img src="..."/>
标签中。
是否存在任何已知的安全漏洞,例如链接到“evil.example.com/evil.jpg”的人,并且 evil.jpg 包含一些将由于浏览器错误或类似原因而执行的代码?
(让我们忽略 CSRF 攻击 - 我只允许具有典型图像文件后缀的 URL 就足够了。)
图像文件中的安全风险不时出现。这是一个示例:https ://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-22_11-5388621.html?tag=nl.e019 。这是一篇旧文章,所以显然这些东西已经流传了一段时间。
虽然无法确定某事总是安全/从不安全,但到目前为止,风险似乎相对较低,并且很快就被图像查看器制造商修补了。IMO 最好的测试是您听到实际问题发生的频率。这种威胁媒介多年来一直是一种已知的可能性,但并没有真正普及。考虑到人们在公共论坛上链接图像的程度,如果这是一种现实的攻击,我预计它会很快成为一个大问题。
前段时间发生了JPEG 缓冲区溢出。此外,您必须考虑实际包含代码的图像,这样您就不会执行代码。
是的,这可能是个问题。有相当多的已知漏洞利用浏览器或操作系统的图像渲染代码中的漏洞来工作。包括远程执行漏洞。它可能不是最容易利用的缺陷,但它绝对是一个问题。
此类漏洞的一个示例:http ://www.securityfocus.com/bid/14282/discuss (但您可以找到大量其他相同类型的漏洞)。
我想我记得一个高知名度网站的问题正是利用了这种漏洞。某个第三方广告提供商显示了一个广告图像,并且该图像未经检查。1000 名用户遭到破坏……再也找不到故事了……抱歉。
因此,在处理不受信任的数据时可能会出现缓冲区溢出,但无论您如何处理。此外,如果您以 URL 的形式将不受信任的数据插入页面,则存在 XSS 缺陷的风险。但是,我想您想知道为什么浏览器将其标记为问题:
在我的头顶上:
我相信在这种情况下仍然会发送推荐人信息。即使您从来没有也永远不会对会话使用 URL 重写,您仍然会暴露以前保密的信息。chris_l:没错,我刚刚做了一个快速测试——浏览器(FF 3.5)发送了Referer 标头。
您不能确定返回的图像数据不会误导。例如,按钮上的文本错误。或者在更大的图像中,例如欺骗指令。
图像大小可能会改变布局。图像加载甚至可能会延迟以在关键时刻移动页面。克里斯_l:好点!我应该始终设置宽度和高度(可以在用户发布图像时由服务器确定 - 只要图像不改变就可以工作......更好的想法?)
图像可用于类似 AJAX 的功能。chris_l:请详细说明这一点——它是如何工作的?
浏览器将标记您网站的问题,隐藏其他问题并使用户接受松弛的安全实践。chris_l:当站点使用 HTTPS 时,这绝对是一个重要问题。
更新:证明是错误的!
您还必须考虑,cookie(即 sessionID)也会发送到图像所在的服务器。因此,另一台服务器获取您的 sessionID。如果图像实际上包含 PHP 代码,它可能会窃取 sessionID:
例如,您包括:
<img src="http://example.com/somepic.jpg alt="" />
在http://example.com的服务器上有一个 .htaccess 文件,内容如下:
RewriteRule ^somepic\.jpg$ evilscript.php
那么图片实际上是一个php文件,生成图像,但也做了一些邪恶的事情,比如会话窃取或其他什么......