一直以来,各大论坛和邮箱都允许使用外链图片。一方面解决了上传和保存带来的资源消耗,更重要的是方便用户转载图片。

  然而,简单的背后是否暗藏着什么风险呢?大多或许认为,不就是插入了一张外部图片而已,又不是什么脚本或插件,能有多大的安全隐患。

  曾经也有过外链图片泄漏cookie那样的重大隐患,不过那都是很久以前的事了。在如今浏览器日新月异的年代里,这样的bug已经很难遇到了。不过利用正常的游戏规则,我们仍能玩出一些安全上的小花招。

No.1 —— HTTP401

  (严重程度:低)

  大家都见过,打开路由器的时候会弹出个登录框。

  

  如果了解HTTP协议的话,这是服务器返回401,要求用户名密码认证。

  不过,如果是一个图片的请求,返回401又会怎样呢?很简单,我们就用路由器的URL测试下:

<img src="http://192.168.1.1/">

  

  居然依旧跳出了一个对话框!

  如果将一个HTTP401的图片插入到论坛里,是不是也会如此呢?我们用ASP写个简单的脚本,并且能自定义提示文字:

<%
Response.Status = "401"
Response.AddHeader "WWW-Authenticate", "Basic realm=IP IC IQ卡,统统告诉我密码!"
%>

  然后将URL插入到论坛或空间(如果拒绝.asp结尾的url图片,那就在后面加上个?.png)。

  先在QQ空间里测试下:

  

  不出所料,弹出了对话框。不过在ie外的浏览器下,汉字成了乱码,即使设置了ASP以及HTTP的编码也不管用。

  我们只好换成英文字符,再百度贴吧里用各种浏览器测试下:

  ie678:

    

  ie9:  

  firefox:

    

  safari:  

  除了Opera和Chrome没有弹出来,其他的浏览器都出现。不过部分浏览器截断了空格后的字符。

  当然,你也可以扩展这个功能,记录用户输入了什么内容。尤其是带上些官方式的文字提示,很容易用来捕捉到一些账号信息。曾经用这招在论坛抓到不少可用的账号密码,不过如今安全意识普遍提高,加上一些安全软件的拦截,这招实用性大打折扣了。

  因为是强制弹出的,往往给人一惊,所以在论坛,贴吧或空间里,倒是可以娱乐娱乐。

No.2 ———— GZip压缩zha弹

  ( 严重程序:中)

  在之前的一篇文章里,谈到使用两次deflate压缩,将数百兆的图片文件压缩到几百字节。
  http://www.cnblogs.com/index-html/archive/2012/06/22/2558469.html

  原理很简单,大量重复数据有很高的压缩率。之前不清楚的deflate算法的最大压缩率有多少,一直不敢确定是不是最优的。后来大致了解了下算 法,由于受到lz77算法的最大匹配长度限制,deflate的最大压缩率确实只有1:1000多点。虽然和rar相比相差甚远,不过1000倍也意味 着,1M的数据可以翻到1G了。

  所以我们可以利用一个超高的压缩的HTTP报文,做几件事:
  1.消耗内存
  2.消耗CPU
  3.消耗缓存

  对于现在的硬件配置,内存已经足够支撑浏览器,多核的CPU也没法完全耗尽,唯独硬盘是个瓶颈。

  我们用C程序创建个1G的内存数组,将图片数据放在其首,后面用'\0'填充。然后使用zlib进行压缩,得到1M左右的结果,保存为x.jpg.gz

  接着用ASP读取压缩文件,并给返回的头部加上Content-Encoding字段。

  简单的测试下:

Dim stream
Set stream = Server.CreateObject("ADODB.Stream")With stream.Type = 1.Open.LoadFromFile _Server.MapPath(Request.QueryString("File") & ".gz")
End WithDim agent
agent = Request.Servervariables("HTTP_USER_AGENT")With ResponseIf Instr(agent, "Firefox") > 0 Or Instr(agent, "AppleWebKit") > 0 Then.AddHeader "Content-Encoding", "deflate"Else.AddHeader "Content-Encoding", "gzip"    End If.AddHeader "Content-Length", stream.Size.BinaryWrite stream.Read
End With

  由于部分浏览器的Content-Encoding只支持deflate.所以特意做了判断,以免失效。

  先用ie测试。打开GZip.ASP?file=x.jpg(测试地址:http://www.etherdream.com/Test/bomb.html),正常显示出图片,紧接着硬盘灯狂闪。。。关闭网页之后,打开浏览器缓存文件夹。果然,1G大小缓存已产生!

  

  

  接着用火狐测试。不过没等图片出来,浏览器已经卡死了。等了数分钟仍然没有响应,只得结束任务。

  

  用Chrome测试。内存暴涨,最终图片倒是正常显示出来了,不过页面经常崩溃。

  Opera一切正常,也没产生特别大的缓存文件。当然,不同版本的浏览器大不相同,可以自己测试。

  不过,几个最常用的浏览器有效果就行了。

  我们可以将图片插入到邮件里,或论坛贴图,如果不幸被火狐用户点中,那将当场炸死;webkit内核的浏览器则严重拖慢了系统速度;最杯具当属 ie用户了,不知不觉被吞走了1G的硬盘空间,如果插入多个的话则更多倍,只要url参数不同!如果配合HTTP重定向,定向到带有随机参数的url,那 么每次访问页面又会加载并缓存一次!

No.3 ———— 收邮件时暴露IP

  (严重程序:高)

  这一招其实没有任何技术含量,也不是什么BUG,连缺陷也算不上。仅仅是一种小技巧而已。

  既然网页里的图片可以外链,那就意味着可以访问任何服务器,包括我们自己的。在服务器上稍作记录,就可以轻易获得访问者的ip。

  这对于论坛来说没多大意义。因为论坛里面访客众多,很难知道哪个ip是谁的。但电子邮件就不一样了,很少会有其他人来用你的邮箱。

  当我们向某个人发送一封邮件,里面有个不起眼的图片,外链到我们的cgi程序上。当他打开邮件时,cgi程序接收到了他的请求,自然也就探测到了ip。为了防止图不裂开,返回一个微小的图片,以防发现破绽。

  对于QQ邮件这类有推送提示的邮箱,对方很快就会打开邮件,尤其是写一个比较真实的邮件标题。

  利用这点,我们可以写个邮件群发的脚本,向多个QQ发送探测邮件。我们把每个email对应图片的url里带上唯一参数,以区分不同的邮箱。

  不出一时半日,当接收者陆续打开邮件,他们的ip也随之暴露。即使用代理上网,也能通过HTTP的HTTP_X_FORWARDED_FOR字段获得真实ip地址。

  通过ip地理定位,很快就可以知道他们最近在哪里。如果有相同的ip,说不定他们正在一个内网里呢:)

防范措施

  因为图片保存在外部,所以完全不在自己的可控范围里。即使用户外链的是合法的图片,也只能意味的是当前,而不是以后,因为用户可以更新外链的内容,甚至可以针对不同的ip返回不同的内容。因此要完全防住,只能在客户端上分析图片的内容,后台最多起到辅助作用。

  在目前版本的百度贴吧里,因为图片会显示在贴吧的主页面上,所以对外链的安全性已极大的增强。当用户使用外链的形式插入图片时,后台服务器会不 定期的检查图片的合法性,如果存在异常则会删除此图片。如果同样的站点出现多次异常情况,则会进入黑名单。虽然仍有部分疏漏,但相比没有要好的多。对于空 间相册,或者可信站点的图片,则不会反复的扫描检测。

  类似的,像微博这类传播性极强的应用,则完全不能使用外链。即使需要,也是由代理服务器读取,再返回给用户,因此就从根本上排除了安全隐患。

原文:http://www.cnblogs.com/index-html/archive/2012/08/15/extern_img.html

外链图片也有风险吗?相关推荐

  1. 让博客园的编辑器自动上传外链图片

    让博客园的编辑器自动上传外链图片 我经常翻译国外的文章,遇到这么个需求.如果要翻译的文章中包含了图片,那么复制到博客园的时候图片肯定是引用原网站的了.如果原网站是个人博客(任何时候域名都可能失效),或 ...

  2. 解决CSDN导入md文档时图片显示不出来,出现[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jiakLQhy-1628602853830)提示

    解决CSDN导入md文档时图片显示不出来,出现[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jiakLQhy-1628602853830)提示 https://blog ...

  3. Git连接GitHub仓库,同步上传图片及CSDN外链图片转存失败解决方案

    Git连接GitHub仓库,同步上传图片及CSDN外链图片转存失败解决方案 ​ 最近在使用markdown编辑器写博客时,发现了一个问题,就是本地图片的上传问题,查阅发现,可以上传本地图片,使用外链进 ...

  4. 如何获取Flickr图片链接地址作为外链图片

    Flickr,雅虎旗下图片分享网站.为一家提供免费及付费数位照片储存.分享方案之线上服务,也提供网络社群服务的平台.其重要特点就是基于社会网络的人际关系的拓展与内容的组织.这个网站的功能之强大,已超出 ...

  5. 2022 WordPress All Pic Local v0.2 下载外链图片到本地

    WordPress批量下载外链图片到本地插件,这是我在网上不经意间发现的,觉得挺有用的,就发上来共享下.这插件的功能是能把所有文章内的站外图片下载到本地指定目录里,而且可以替换原图片URL到新地址.如 ...

  6. php外链图片转换,解决zblogPHP远程外链图片自动保存的办法

    使用zblogphp版的独立博客博主们可能没有在意,zblogphp存在一个小bug就是在博客没有启用远程图片附件自动保存到本地的情况下,编辑文章中使用的外链图片依然会被自动保存到本地(在附件管理中可 ...

  7. savefiles提供免费25G网盘,可外链图片、视频

    savefiles网盘提供免费的25g容量给注册用户,单个文件最大可上传2g,可以外链图片.视频等文件到网页.上传速度快,不限制下载次数,不限速.国外网盘虽说不限速但也不可能像国内网盘那么快.游客也可 ...

  8. 外链图片怎样搬到淘宝

    本文来源于http://www.daxiangce.com/space-5760-do-blog-id-975.html 淘宝店主应该都知道,从2014年4月份开始,淘宝上传宝贝禁止描述里引用了第三方 ...

  9. html如何添加外链图片代码,MediaWiki HTML 插入外链图片

    MediaWiki HTML 插入外链图片 我的MediaWiki搭建在万网虚拟主机之上,受到很多限制,不能通过经典的GeSHi+Pygmentize实现语法高亮,最后曲线救国,找到了基于Alex G ...

最新文章

  1. NAACL | 通过对抗性修改,探究链接预测的鲁棒性和可解释性
  2. IP通信基础 5月8日
  3. 【转】ABP源码分析四十三:ZERO的本地化
  4. 如何在MyEclipse中建立一个代理服务器
  5. 在javascript中调用java
  6. python最大的社区_python 最大流
  7. 大数据可视化的价值体现在哪
  8. 【招聘】浙江大学杨杰课题组-博士后招聘-医学人工智能
  9. Unity3D(二)游戏对象及组件
  10. Redis的安装教程(Windows+Linux)【超详细】
  11. 颜色代码查询,在线颜色选择器,RGB颜色对照表
  12. 用3ds max 2020制做一个VRay油漆木材材质
  13. 利用html和js输入数字转换为中文大写示例。
  14. 大数据Kudu使用方法
  15. 2021年煤气考试题库及煤气免费试题
  16. 互联网产品思考(一) —— 基本理念
  17. SQL Server developer和enterprise有什么区别?以及各个版本的定义
  18. Swift对象存储服务
  19. 蘑菇丁工学云打卡教程
  20. 算法设计与分析实验---动态规划

热门文章

  1. 钥匙计数之一(HDU-1483)
  2. 动态规划 —— 动态规划概述
  3. 信息学奥赛C++语言: 直角三角形
  4. 21 MM配置-采购-定义采购组
  5. 什么工作经常出差_商旅人群洞察:什么样的人经常坐飞机出差?
  6. pythonrequest函数_[Python]requests模块:HTTP请求时的回调函数
  7. python安装界面翻译_Python新手教程:40行python代码写一个桌面翻译器
  8. mui组件 a 锚点定位(Demo案例演示)- 代码篇
  9. MUI 如何更改单选框样式
  10. 关于node.js 和vue.js的安装、卸载、浏览器测试问题?