常见劫持手段按照劫持的方法不同,百度只不过是躺*敏*感*词*
优采云 发布时间: 2021-07-01 02:23
常见劫持手段按照劫持的方法不同,百度只不过是躺*敏*感*词*
常见的劫持手段
根据劫持方式的不同,我将劫持分为以下两类:
注入js劫持:通过将劫持的js代码注入普通页面来劫持iframe劫持。劫持:将普通页面嵌入iframe或在页面中添加iframe,篡改页面。劫持:正常页面存在冗余被劫持的网页标签,导致整个页面大小发生变化
跳转劫持
为了获取流量,一些需要流量合作的电商或者网站百度等会有自己的联盟系统,通过给予一定的奖励来获得分流,例如:百度或者电商会有频道分享。
为了区分哪个是第三方提供的,通常会在 URL 地址中添加 source 和 from 等参数,或者在进入页面之前使用“中间页面”cookie。
这样,当用户输入一个普通的URL时,劫持者就会将他重定向到带有分享或频道号的“中间页面”或在网络层带有频道号的页面。这样,劫持者就会在用户下单或搜索时获得“佣金”。
上面提到的案例还算友好。至少用户通常不会遇到页面更改。有跳转到钓鱼网站的情况,也有不正当竞争的情况:用户输入跳转到or,而对方网站故意让它看起来和百度搜索相似。当时他还帮法务采集了很多案例。
题外话:过去几年,用户使用百度搜索某些医疗查询,立即会接到用户宣传医院的电话。不少网友抱怨,不知道真相的人也纷纷指责百度。其实这种网址就是运营商的网址关键词卖给了医疗机构,百度就是一把*敏*感*词*。 . 当时,另一个项目是加密查询。 . .
注入劫持
在页面传输过程中,内容被网络层“重新处理”。常见的例子包括:注入js、iframe、篡改页面。
注入js
注入js的方式可以是通过document.write或者直接改html代码片段等,给页面添加外部js。有些运营商为了增加检测难度,会编造一个不存在的URL地址,使其不被过滤。或测试。
案例1:运营商会使用自己标识的ip或域名作为js URL,只能在浙江移动网下解析,ip同样如此
案例2:运营商很聪明,知道页面可以检测所有外链js域名,例如:我只允许/static外链js,其他js会被记录和反馈;为了不被发现,遇到一个Case Telecom会访问一个不存在的地址,比如:/static/abc.js,这个地址会直接返回运营商劫持的js代码,不会发送请求到百度的服务器。
放置在 iframe 或 iframe 的其他页面中
这种情况比较少见,但是一些网站或者没有内容的垃圾站会用这种方法。他们通常通过流行的关键词 做SEO,打开网站 居然去了广告。该类没有任何实际内容,但该页面嵌入了另一个网站。如果我们认识到它不是嵌入的,我们需要检查。
篡改页面内容
这种情况比较少见,通常是在页面底部添加js以外的div,然后显示一些非网站的内容。
劫持检测方法
我讲了常见的劫持方法,我们来看看如何识别上面提到的劫持。
上图为2015年8月11日百度某页面被劫持,当天数据还不错。浙江移动网络劫持率高达40%+。大多数劫持来自这个域名,也就是手机流量提醒(也特意启用了一个域名zjtoolbar,浙江工具栏)。 . .
跳转劫持
仅依靠网页很难检测到跳转式劫持。当时我们在手机百度(handbai)里做了检测,所以比较简单。用户输入搜索词(查询),打开百度页面URL,页面加载结束后,APP比较访问的URL是否为之前访问过的URL,如果不一致,则为记录和报告。
注入js类型页面
重写document.write方法遍历页面的script标签,在外链js中添加白名单,不在白名单中报告js的外链
检测是否被iframe嵌套
通过对比父对象,如果页面是嵌套的,parent!==window,来获取我们页面的URL地址,可以使用如下代码:
function getParentUrl() { var url; if (parent !== window) { try { url = parent.location.href; } catch (e) { url = document.referrer; } } return url; }
特殊方法
如前所述,类似于电信在白名单中伪造js URL,篡改页面内容,我们无法通过上述方法检测到这些信息。如果是在APP里面,可以做的事情就更多了。除了上述之外,您还可以比较页面的内容长度。当时手白的做法是:
当用户开始输入查询时,APP访问空白页面。页面中只有html、title、head、body、script,script标签中的主要代码是嗅探是否被劫持。
因为一般劫持不会针对某个页面,而是针对整个网站域名,所以我们的空白页面也会被劫持。
一旦被劫持,这样一个简单的页面结构就很容易被分析为页面劫持。如果分析了劫持方式,就报案
脚本中的核心代码如下:
function hiJackSniffer() { var files = $.toArray(D.querySelectorAll('script[src]')); var arr = []; for (var i = 0, len = files.length; i 4e3) { var tmp = {}; var headjs = $.toArray(D.head.querySelectorAll('script')); var unknownCode = []; if (headjs.length) { unknownCode = unknownCode.concat(headjs.map(function(v) { return v.innerHTML; }).filter(function(v) { return !!v; })); } var body = $.toArray(D.body.querySelectorAll('*')); if (body.length > 1) { unknownCode = unknownCode.concat(body.map(function(v) { return v.outerHTML.split('\n').join(''); }).filter(function(str) { if (/^/.test(str)) { return false; } return true; })); } return sendImg(unknownCode, 3); } sendImg([], 0); }
这样,除了检测多余的js外链,还可以检测篡改页面内容等情况。除了检测域名劫持外,还可以通过在用户输入查询时访问空白页面提前完成DNS解析,也可以用于劫持防御,即所谓的“三鸟一石”!
劫持防御
最简单粗暴的方法是直接使用 HTTPS,一劳永逸。然后是证据采集、诉讼或警告渠道骗子。另外,我们可以继续使用空白页进行劫持检测。
在没有全量https的时期(毕竟整个站点https涉及的工作量不小),当用空白页面嗅探当前网络环境存在劫持风险时,然后在第二次启动期间会调用客户端接口告诉客户端这个使用https,可以降低被劫持的风险,通过这个页面的小流量测试https数据。以后https满了后,老版本的APP可以通过空白页全开。
【本文为51CTO专栏作家《三水清》原创手稿。转载请通过微信公众号联系作者获得授权]
戳这里查看作者更多好文章
[编辑推荐]
IntelliJ IDEA 2017下基于Maven的Java Web程序开发,前端公知,外媒速递:5个值得你了解的Material Web设计框架,7***开源网页分析软件推荐*** 5个前端框架对比