网站内容劫持 广告(页面劫持使用HTTP请求请求网站页面的时候,网络运营商会在正常的数据流中插入精心设计的网络数据报文)

优采云 发布时间: 2021-12-25 23:01

  网站内容劫持 广告(页面劫持使用HTTP请求请求网站页面的时候,网络运营商会在正常的数据流中插入精心设计的网络数据报文)

  前端页面劫持与反劫持页面劫持

  当使用 HTTP 请求请求网站页面时,网络运营商会将精心设计的网络数据消息插入到正常的数据流中,让客户端(通常是浏览器)显示“错误”的数据,通常会弹出一些视窗。促销广告或网站内容的直接展示。

  常见劫持方式: 跳转劫持:

  用户输入地址A,但跳转到地址B

  为了获取流量,一些需要流量合作的电商或者百度等网站会有自己的联盟​​系统,通过给予一定的奖励来获得分流,比如:百度或者电商会有渠道共享。

  为了区分哪些是被第三方转用的,通常会在URL地址中添加source和from等参数,或者在进入页面之前使用“中间页面”cookie。

  这样,当用户输入一个普通的URL时,劫持者就会将他重定向到带有共享或频道号的“中间页面”或在网络层带有频道号的页面。这样,劫持者就会在用户下单或搜索时获得“佣金”。

  DNS劫持:在DNS服务器中,改变域名对应的IP地址。您解析的域名对应的IP在劫持前后不同;

  中间人劫持发生在第三步:因为恶意攻击者控制了你的网关,当你发送搜索到的IP请求时,中间人拦截并返回给你的IP恶意网站,你的浏览器这个IP会被认为是你要访问的域名的IP!!该IP是攻击者模仿目标网站前端接口构建的接口。打。

  注入劫持:

  与跳转式劫持不同,是指在普通网页中注入广告代码(js、iframe等),实现页面弹出提醒或底部广告等,分为以下三个子类:

  1.注入js类劫持:

  劫持是通过将被劫持的js代码注入普通页面来实现的;注入js的方法可以是通过document.write或者直接改html代码片段等,给页面添加外部js。有些运营商为了增加检测难度,会编造一个no Existing URL地址,使其不被过滤或检测。

  案例一:运营商会使用自己识别的ip或者域名作为js URL,只能在浙江移动网下解析,ip也一样

  案例2:运营商很聪明,知道页面可以检测所有外链js域名,例如:我只允许/static外链js,其他js会被记录和反馈;为了不被发现,我遇到了一个案例电信会议访问了一个不存在的地址,比如:/static/abc.js,这个地址直接从运营商处返回被劫持的js代码,请求不会发送到百度的服务器。

  2.iframe 劫持:

  将普通页面嵌入到 iframe 中或在页面中添加 iframe 页面;通常,SEO 是通过流行的 关键词 完成的。打开网站时,没有广告等实际内容,而是页面嵌入了另一个网站。我们如果确认它不是嵌入的,则需要对其进行测试。

  3.篡改页面劫持:

  过多的劫持网页标签出现在正常页面上,导致页面整体大小发生变化;

  HTTP劫持:识别HTTP连接。天上的许多连接中有许多种协议。第一步,在TCP连接中找出应用层使用HTTP协议的连接,并进行识别;篡改HTTP响应体,通过网关获取数据包。进行内容篡改;抢先返回数据包,被篡改的数据包会抢占正常站点返回的数据包到达用户侧,使得后续的正常数据包到达后直接丢弃。

  劫持检测方法1、跳转劫持

  仅依靠网页更难检测跳转型劫持。当时我们在手机百度(Handbai)中进行了检测,所以比较简单。用户输入搜索词(查询),打开百度的页面URL,然后页面加载时,APP比较访问的URL是否是之前访问过的,如果不一致,记录并报告.

  2、注入js页面

  MutationObserver 是 HTML5 的新 API。它非常强大,并且为开发人员提供了当 DOM 树在一定范围内发生变化时做出适当反应的能力。即MutationObserver在观察时发现新元素不会立即回调,而是将一个时间段内出现的所有元素一起传输。所以我们需要在回调中进行批处理。此外,当指定的 DOM 节点(目标节点)发生变化时,会调用回调。调用时,观察者对象会向函数传递两个参数。第一个参数是一个收录

多个 MutationRecord 对象的数组,第二个参数是观察者对象本身。

  var observer = new MutationObserver(function (mutations, observer) {

mutations.forEach(function(mutation) {

console.log(mutation);

});

});

var article = document.querySelector('article');

var options = {

'childList': true,

'attributes':true

} ;

observer.observe(article, options);

  // 保存原有接口

var old_setAttribute = Element.prototype.setAttribute;

// 重写 setAttribute 接口

Element.prototype.setAttribute = function(name, value) {

// 匹配到 类型

if (this.tagName == 'SCRIPT' && /^src$/i.test(name)) {

// 白名单匹配

if (!whileListMatch(whiteList, value)) {

console.log('拦截可疑模块:', value);

return;

}

}

// 调用原始接口

old_setAttribute.apply(this, arguments);

};

// 建立白名单

var whiteList = [

'www.yy.com',

'res.cont.yy.com'

];

/**

* [白名单匹配]

* @param {[Array]} whileList [白名单]

* @param {[String]} value [需要验证的字符串]

* @return {[Boolean]} [false -- 验证不通过,true -- 验证通过]

*/

function whileListMatch(whileList, value) {

var length = whileList.length,

for (i = 0; i < length; i++) {

// 建立白名单正则

var reg = new RegExp(whiteList[i], &#39;i&#39;);

// 存在白名单中,放行

if (reg.test(value)) {

return true;

}

}

return false;

}

  3、检测是否被iframe嵌套

  window.self:返回对当前窗口对象的引用。

  : 返回窗口系统中最顶层窗口的引用。

  if (self != top) {

// 我们的正常页面

var url = location.href;

// 父级页面重定向

top.location = url;

}

  4、特殊方法

  前面提到过,类似于电信在白名单中编造js URL,篡改页面内容,我们无法通过上述方法检测到这些信息。如果是在APP里面,除了上面的,还有更多的事情可以做。此外,您还可以比较页面的内容长度。当时,手白的做法是:

  当用户开始输入查询时,APP访问一个空白页面,页面中只有html、title、head、body、script,script标签中的主要代码是嗅探是否被劫持。

  因为一般劫持不会针对某个页面,而是针对整个网站域名,我们的空白页面也会被劫持。

  劫持防御

  最简单最粗鲁的就是直接去HTTPS,一劳永逸。然后是证据采集

、诉讼或警告渠道骗子。此外,我们可以继续使用空白页面进行劫持检测。

  在没有全量https的时期(毕竟整个站点https涉及的工作量不小),当用空白页面嗅探当前网络环境存在劫持风险时,在这个启动期间调用客户端接口告诉客户端使用https,这样不仅可以降低被劫持的风险,还可以通过这个页面的小流量测试https数据。日后全额https后,还可以通过空白页面打开旧版APP全额。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线