现如今,网民的网络账户被盗,很有可能是被“钓鱼”了。去年的一份安全报告中指出:“近85%的资金损失是通过钓鱼网址泄露支付信息造成的”。

传统的钓鱼网站通常是申请一个和被冒充网站相似的域名,比如 taobao000.com ,或者直接利用三四级域名来冒充,比如 taobao.com.evil.com。

钓鱼网址一般是通过邮件、短信、聊天工具等传输系统发送给目标群体的,于是这些传输系统的运营商会责无旁贷的采取措施,来尽可能的检测并屏蔽那些钓鱼网址,而且即便它们不做,现代的浏览器也都会做这件事。最常见的钓鱼网址检测技术就是维护一个钓鱼网站域名的黑名单,或者使用别的组织共享出来的黑名单(比如谷歌的 Safe Browsing)。一旦某个钓鱼网站被添加进了这个黑名单,那么它的主人钓鱼成功的概率就会大幅降低。

如何跳过这些检测?如何不使用常规的网址来存放网页?于是有人想到了利用 Data URI。仅仅在 2017 年,我就看到已经有两家网络安全公司发文,分别讲了两个利用 Data URI 来钓鱼的真实案例,一个是针对 Gmail,一个是针对 Yahoo Mail。我这里做了一个仿冒淘宝登录页的钓鱼页面 的demo,你可以体验一下。

利用 Data URI,可以把整个网页的内容都放到这个 URL 里。由于 Data URI 完全没有域名的概念,所以黑名单屏蔽技术对他无效。而且除此之外,还有一个 bonus,那就是你可以在一个 Data URI 的头部放置任意你想冒充的网站的网址,像这样:

在这个真实的 Gmail 登录网址的后面是一连串的、比被钓鱼者的屏幕还要宽的空格,隐藏在这些空格后面的,才是真正的网页源码:

普通网民很容易忽略 “data:text/html,” 这几个多出来的字符。有了这个 bonus,钓鱼者的钓鱼成功率更高了,而且不用总花钱去换域名了。

为此,Chrome 从 56 开始,在地址栏左侧把 Data URI 标记成了“不安全”网址:

这可能会减少一些钓鱼事件的发生,但考虑到一些网民完全没有看地址栏的习惯(尤其是现在有一些浏览器故意弱化地址栏)、以及在移动端 WebView 打开网页完全没有地址栏,于是 Chrome 从 60 开始,采取了一种更彻底的方式:屏蔽从页面打开的 Data URI 网址(相对应的行为是在地址栏回车打开 Data URI 网址)。

比如下面这个 <a> 链接:

<a href="data:text/html,foo">

如果你单击这个链接的话,会直接报错,Not allowed to navigate top frame to data URL:

但在右键菜单中点击 “在新标签中打开链接”、“在新窗口中打开链接” 不受影响。此外,这次还会屏蔽下面这些跳转方式(30x 跳转若干年前就已经屏蔽了):

1. html 里添加 <meta http-equiv="refresh" content="0;url=data:text/html,foo" />

2. 响应头里添加 refresh: 0;url=data:text/html,foo

3. JS 里执行 window.open("data:text/html,foo")

4. JS 里执行 location.href = "data:text/html,foo"

等一切能让页面跳转到 Data URI 的方式都会被屏蔽,其中 open() 方法打开的新标签页面会被强制替换成 about:blank。其实 Chrome 的这些屏蔽措施之前就已经应用到了 file: 和 chrome: 等协议上了。

例外情况除了上面说的右键菜单中的各种操作,还有:

1. <a download>

2. 当指定的 MIME 触发了浏览器下载逻辑的情况,比如 open("data:application/zip,foo")

3. 直接在地址栏上输入 Data URI 并回车

当然还有我们常用的,Data URI 没有用在顶层页面网址的情况,比如作为 <img> 的 src 属性,<iframe> 的 src 属性,CSS 里的 url() 的参数等,都不受影响。

在 Chrome 60 之前的三个版本 Chrome 57、58、59 中,当你打开一个 Data URI 页面,会有一句警告信息,提醒开发者提前做迁移:

Chrome 的人做了统计,说从非 Data URI 页面跳到 Data URI 页面的情况只有不到万分之五的概率,如果你的网站恰巧用到了这种在前端生成页面的方式,可以尝试迁移到后端来生成。

Chrome 禁止从页面打开 Data URI 网址了的更多相关文章

  1. Data URI 应用场景小结

    Data URI scheme 在前端开发中是个常用的技术,通常会在 CSS 设置背景图中用到.比如在 Google 的首页就有用到: Data URI scheme 简称 Data URI,经常会被 ...

  2. 细说 Data URI

    Data URL 早在 1995 年就被提出,那个时候有很多个版本的 Data URL Schema 定义陆续出现在 VRML 之中,随后不久,其中的一个版本被提上了议案——将它做个一个嵌入式的资源放 ...

  3. Data URI(转)

    Data URL 早在 1995 年就被提出,那个时候有很多个版本的 Data URL Schema 定义陆续出现在 VRML 之中,随后不久,其中的一个版本被提上了议案——将它做个一个嵌入式的资源放 ...

  4. 关于Data URI

    [新增]:http://www.webhek.com/post/data-url.html 引子:在研究FileReader时,有个方法readAsDataURL;然后看到打印出来的东西类似于如下:[ ...

  5. 什么是URI、URL、URN、URC和Data URI?

    前言 不知道大家有没有电话拨号通过'猫'上网的经历,那时测试网络是否连接,最好的方式就是打开浏览器输入: www.baidu.com 那会管这一连串字母叫' 网址 '.之后上大学(计算机专业),知道了 ...

  6. Chrome调试手机页面

    新开发的网页需要在手机或是模拟机上运行测试,如果手头事件比加紧,那么可以借助 Chrome提供的手机网页预览程序进行简单调试.查看 制作的网页是否能够适合各种手机型号使用. 下面所以下如何使用Chro ...

  7. JS魔法堂:Data URI Scheme介绍

    一.前言 上周五公司内部的Any Topic Conf.上我和同事们分享了这个主题,有同事说这个有用,有同事说这个没啥用,后来还延伸到网站性能的话题上,大家讨论的激烈程度让我觉得这次选题还不错.本篇先 ...

  8. android studio使用CMake和NDK,实现应用自身被卸载时打开某一网址

    实现应用自身被卸载时打开某一网址的c代码 MyActivity: public class MyActivity extends Activity { /** * Called when the ac ...

  9. 通过html页面打开Android本地的app

    http://www.cnblogs.com/yejiurui/p/3413796.html 一.通过html页面打开Android本地的app 1.首先在编写一个简单的html页面 <html ...

随机推荐

  1. Nginx 配置 和安装

    Nginx 博客 web服务器和web框架的关系 web服务器(nginx): 接收HTTP请求(例如www.pythonav.cn/xiaocang.jpg)并返回数据 web服务器,仅仅就是 接收 ...

  2. SQL LEN() 函数

    LEN() 函数 LEN 函数返回文本字段中值的长度. SQL LEN() 语法 SELECT LEN(column_name) FROM table_name SQL LEN() 实例 我们拥有下面 ...

  3. 文本分类实战(九)—— ELMO 预训练模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  4. jenkins乱码解决问题

    1.jenkins控制台线上乱码解决 系统管理——系统设置,添加编码环境变量 zh.CH.UTF-8 2.java启动后,tomcat日志显示乱码,原因是环境变量没有带过去,因此shell脚本头部需要 ...

  5. H5页面长按导致app崩溃问题解决

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 最近用H5页面做了个安卓的项目,但是在H5页面中长按文字内容,会导致APP崩溃掉... ...

  6. js获取浏览器窗体最大化事件

    <mce:script language="javascript"><!--function ReSet() {document.getElementById(& ...

  7. SQL其他常用的语句

    阅读目录 一:汇总数据 1.理解AVG函数 2.理解COUNT()函数 3.理解max()函数 4.理解min()函数 5.理解sum()函数 二:分组数据 1 创建分组(group by) 2 HA ...

  8. AI Conditional GAN

    Conditional GAN 参考链接: https://arxiv.org/pdf/1611.07004v1.pdf

  9. LOJ2831 JOISC2018 道路建设 LCT、树状数组

    传送门 题目的操作大概是:求某个点到根的链的逆序对,然后对这条链做区间赋值 求某个点到根的链,就是LCT中的access操作,所以我们每一次把access过后的链打上标记,就可以做到区间赋值了. 计算 ...

  10. 解决 AttributeError: 'ForeignKey' object has no attribute 're'

    解决办法 # print('rel...',filter_field_obj.re.to.objects.all()) print("rel...", filter_field_o ...