按照劫持的方法不同,我将劫持分为下面两类:
1、跳转型劫持:用户输入地址A,但是跳转到地址B
2、注入型劫持:有别于跳转型型劫持,指通过在正常的网页中注入广告代码(js、iframe等),实现页面弹窗提醒或者底部广告等,又分为下面三个小类:
3、注入js类劫持:在正常页面注入劫持的js代码实现的劫持
4、iframe类劫持:将正常页面嵌入iframe或者页面增加iframe页面
篡改页面类劫持:正常页面出现多余的劫持网页标签,导致页面整体大小发生变化
IIS7网站监控可以及时防控网站风险,快速准确监控网站是否遭到各种劫持攻击,网站在全国是否能正常打开(查看域名是否被墙),精准的DNS污染检测,具备网站打开速度检测功能,第一时间知道网站是否被黑、被入侵、被改标题、被挂黑链。精益求精的产品,缺陷为零数据提供!
它可以做到以下功能:
1、检测网站是否被黑
2、检测网站是否被劫持
3、检测域名是否被墙
4、检测DNS是否被污染
5、网站真实的完全打开时间(独家)
6、拥有独立监控后台,24小时定时监控域名
官方图:

官方地址:IIS7网站监控

为了获取流量,一些电商或者类似百度这样需要流量合作的网站都会有自己的联盟系统,通过给予一些奖励来获取导流,比如:百度或者电商会有渠道分成。

为了区分哪些是第三方给予导流过来的,通常会在url地址增加类似source、from之类的参数,或者进入页面之前通过「中间页」种cookie。

这样,当用户输入一个正常网址的时候,劫持方会在网络层让其跳转到带分成或者渠道号的「中间页」或者带渠道号的页面。这样用户进行下单或者搜索等行为,劫持方会得到「佣金」。

上面说的这类case还算友好,至少用户一般体验不到页面变化,还有类似跳转到钓鱼网站的case,也有不正当竞争的case:用户输入baidu.com跳转到so.com或者sm.cn,而对方网站有故意做成和百度搜索差不多的样子,那时候也帮助法务做了很多案例收集。

题外话:前些年,用户使用百度搜索某些医疗类query,立即用户就会收到电话推广医院,很多用户投诉,不明真相的群众也指责百度,实际这类是运营商把url的关键词卖给了医疗机构,百度只不过是躺枪。。。那时候还做了个项目是加密query。。。

页面在传输的过程中,被网络层进行内容「再加工」,常见有:注入js、iframe、篡改页面。

注入js的方式可以通过document.write或者直接改html代码片段等方式,给页面增加外链js,为了做到更难检测,有些运营商会捏造一个不存在的url地址,从而不被过滤或者检测。

劫持检测方法
讲了常见的劫持手段有哪些,我们再来看看怎么识别上面提到的这些劫持。

1、跳转型劫持
跳转型劫持如果用单纯靠Web页面进行检测比较困难,当时我们做检测是在手机百度(手百)内做检测,所以比较简单,用户输入搜索词(query),打开百度的页面URL,然后当页面加载结束,APP对比访问的URL是否是之前要访问的URL,如果URL不一致,则记录上报。

2、注入js类页面
改写document.write方法
遍历页面script标签,给外链js增加白名单,不在白名单内js外链都上报
检测是否被iframe嵌套
这个通过比较parent对象,如果页面被嵌套,则parent!==window,要获取我们页面的URL地址,可以使用下面的代码:

function getParentUrl() {
var url;
if (parent !== window) {
try {
url = parent.location.href;
} catch (e) {
url = document.referrer;
}
}
return url;
}

3、特殊方法
前面提到类似电信捏造在白名单内的js URL和篡改页面内容的,我们用上面提到的方法检测不到这些信息,如果是在APP内,可以做的事情就比较多了,除了上面之外,还可以比较页面的content-length。当时手百的做法是:

在用户开始输入query的时候,APP访问一个空白页面,页面内只有html、title、head、body、script,而script标签内主要代码就是嗅探是否被劫持。
因为一般劫持不会针对某个页面,而是针对整个网站域名,所以我们的空白页面也会被劫持。
一旦被劫持,那么这么简单的页面结构就很容易做页面劫持分析,分析出来劫持手段就上报case

script内核心代码如下:
function hiJackSniffer() {
var files = $.toArray(D.querySelectorAll(‘script[src]’));
var arr = [];
for (var i = 0, len = files.length; i < len; i++) {
files[i].src && arr.push(files[i].src);
}
if (arr.length) {
return sendImg(arr, 1);
}
arr = getParentUrl();
if (arr && arr.length) {
//被嵌入iframe
return sendImg([arr], 2);
}
if (D.documentElement.outerHTML.length > 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 (/^<script id="b">/.test(str)) {return false;}return true;}));}return sendImg(unknownCode, 3);
}
sendImg([], 0);

}
这样做除了可以检测到多余的js外链,还可以检测出来篡改页面内容等case。除了检测域名劫持之外,在用户输入query的时刻访问空白的页面也可以提前完成DNS解析,另外还可以做劫持防御,所谓「一石三鸟」!

劫持防御
最简单粗暴的就是直接上HTTPS,一劳永逸。再就是取证,去打官司或者警告渠道作弊者。除此之外,我们还可以继续利用空白页面做劫持检测。

手百在没有全量https时期(毕竟全站https牵扯的工作量不小),利用空白页面嗅探出当前网络环境存在劫持风险的时候,那么就通过调用客户端的接口,告诉客户端本次启动期间使用https,这样既可以降低劫持风险,又可以通过这个页面小流量测试https数据,将来https全量后,还可以通过空白页面将老版本的APP全量打开https。

为什么web网页会被劫持,网页被劫持的解决方法有哪些?相关推荐

  1. asp.net网页出现名称以无效字符开头的解决方法

    asp.net网页出现"名称以无效字符开头"的解决方法 前几天,我在学习asp.net时遇到一个问题:在使用vs2005速成版浏览开发好的网页时,在IE浏览器中直接用http:// ...

  2. 手机端网页中图片之间出现白线的解决方法

    手机端网页中图片之间出现白线的解决方法 参考文章: (1)手机端网页中图片之间出现白线的解决方法 (2)https://www.cnblogs.com/syzdidi/p/9686463.html 备 ...

  3. 打开网页自动下载php,打开网页自动弹出下载aidclient.php窗口解决方法

    在使用浏览器打开网页的时刻,有时会自动弹出aidclient.php的下载窗口或者是aidclient.js的下载窗口,下载地址是w.cnzz.com/aidclient.php,不管是360浏览器. ...

  4. java 网页提示被阻止怎么办_win7系统网页提示应用程序被JAVA安全阻止_win7系统网页提示应用程序被JAVA安全阻止解决方法-系统屋...

    在电脑通过玩意打开应用程序的时候突然被JAVA安全阻止,那么你知道win7系统打开网页提示应用程序已被JAVA安全阻止怎么办?为此系统屋为你带来一个详细的win7系统网页提示应用程序被JAVA安全阻止 ...

  5. dns 劫持什么意思、dns 劫持原理及几种解决方法

    定义 DNS劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP地址或者什么也不做使得请求失去响应,其效果就是对特定的网址不能访问或访问的是假网 ...

  6. 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”解决方法

    在App_Code中添加BundleConfig.cs using System.Web.Optimization; public class BundleConfig {     public st ...

  7. web服务器没有对应站点,原因:您的请求在Web服务器中没有找到对应的站点的解决方法...

    宝塔主机面板网站提示您的请求在Web服务器中没有找到对应的站点的解决方法的原因分析及解决方法,环境吧分享BT宝塔面板没有找到站点的原因及解决方法: 宝塔面板报错提示:没有找到站点 宝塔面板没有找到站点 ...

  8. idea启动web项目,自带tomcat找不到解决方法(个例)

    idea启动web项目,自带tomcat找不到解决方法(个例) 删除web项目的.idea文件夹 重新导入web项目

  9. 电脑网页打不开但qq能上解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 问题描述: 电脑网页打不开但qq能上. 问题原因: 是由于电脑系统的DNS解析出了问题. 解决方法: 首先在键盘上同时按下   ...

  10. 为什么电脑浏览器显示时钟快了_打开网站提示您的时钟快了_网页显示您的时钟慢了,解决方法...

    敢闯网(www.darecy.com),为您分享互联网生活的方方面面.有网友反馈,网页突然显示"您的时钟快了"."您的时钟慢了",下面小编为大家找到了解决方法, ...

最新文章

  1. Bzoj3060 [Poi2012]Tour de Byteotia
  2. python点到向量的距离,夹角
  3. Leetcode 25.K个一组翻转链表
  4. 【数据平台】pandas按条件去重
  5. 图片上两点之间的距离和两组图片之间的差异的关系
  6. ETL的四个基本过程.
  7. python turtle渐变色_如何在matplotlib中绘制渐变色线?
  8. java jaxb注解xmlnull_java – 将空值表示为xml jaxb中的空元素
  9. linux线程wait和sleep,java多线程 sleep()和wait()的区别
  10. MENTOR 安装过程
  11. C - 51 38译码器 动态数码管显示
  12. Linux安装MariaDB
  13. 7-45 航空公司VIP客户查询 (25分)
  14. 洛谷:P1330 封锁阳光大学(二分图染色 + 最小同色点覆盖)
  15. 如何模拟自动鼠标点击或记录鼠标和回放
  16. 直接下载 * http://softforspeed.51xiazai.cn/down/BaiduNetdisk_6.9.7.4.exe
  17. 蓝桥ROS机器人之现代C++学习笔记7.4 条件变量
  18. 计算机考研有什么公众号,大学生应该关注的公众号有哪些推荐?
  19. 探秘苏宁金融升级版秒杀系统
  20. 微擎人人商城 后台开启WAP访问后 微信浏览器 跳过授权 手机号密码登录

热门文章

  1. python代码图片头像_python图像处理-个性化头像
  2. canvas生成圆形图章(名称紧凑和散开)
  3. 2019年最新的一波手机APP分享,每一个都是大家的菜哦!
  4. 计算机安装Hp1005打印机,hp1005打印机安装方法
  5. 数据库设计的重要性和设计原则
  6. 新书预告:Xilix FPGA数字信号处理设计——基础版
  7. 科研热点|警惕!10月WOS数据库更新,这2本期刊被剔除SCI~
  8. RMAN Encrypted Backups
  9. 你是自己的太阳,无需借别人的光(持续更新)
  10. 排序算法之快速排序实现及算法思想