js 监控iframe URL的变化实例代码


Posted in Javascript onJuly 12, 2017

iframe的url可以前端任何地址,这样就可能出现漏洞,如果钓鱼网站通过js把src改成了危险地址,如果没有监控,就会有很大隐患。所以监控iframe的url变化就是必须要解决的问题了。

第一印象的解决方案是通过setInterval轮询监控,貌似不太理想了,而且有延迟。

千般搜索,终于找到了好的方法,可以通过H5新增的MutationObserver来解决,配合DOMAttrModified和onpropertychange来解决兼容性问题。

废话少说,直接上代码。

index.html代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <iframe id="iframeId" src="https://m.ppdai.com">
    
  </iframe>
  <script type="text/javascript" charset="utf-8" async defer>
    var elemIframList = document.getElementsByTagName('iframe');
    for(var i=0;i<elemIframList.length;i++){
      initIframeChange(elemIframList[i]);
    }
    function initIframeChange(elemIfram) {
      if (window.MutationObserver || window.webkitMutationObserver) {
        // chrome
        var callback = function(mutations) {
          mutations.forEach(function(mutation) {
            iframeSrcChanged(mutation.oldValue,mutation.target.src,mutation.target);
          });
        };
        if (window.MutationObserver) {
          var observer = new MutationObserver(callback);
        } else {
          var observer = new webkitMutationObserver(callback);
        }
        observer.observe(elemIfram, {
          attributes: true,
          attributeOldValue: true
        });
      } else if (elemIfram.addEventListener) {
        // Firefox, Opera and Safari
        elemIfram.addEventListener("DOMAttrModified", function(event){iframeSrcChanged(event.prevValue,event.newValue,event.target);}, false);
      } else if (elemIfram.attachEvent) {
        // Internet Explorer
        elemIfram.attachEvent("onpropertychange", function(event){iframeSrcChanged(event.prevValue,event.newValue,event.target);});
      }
    }

    function iframeSrcChanged(oldValue,newValue,iframeObj) {
      console.log('旧地址:'+oldValue);
      console.log('新地址:'+newValue);
      if(newValue.indexOf('aaaa')>-1){
        console.log('有危险,请马上离开……')
        iframeObj.src=oldValue;//钓鱼地址,恢复原url
      }else{
        console.log('安全地址,允许跳转……');
      }
    }

    // 模拟方法
    function simuChange() {
      var div = document.getElementById("iframeId");
      div.setAttribute("src", "aaaa.html");
    }
  </script>
</body>
</html>

aaaa.html代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  aaaaaaaa.html
  <script type="text/javascript" charset="utf-8" async defer>
    console.log('aaaa页面的js执行成功')    
  </script>
</body>
</html>

执行结果:

危险情况:

js 监控iframe URL的变化实例代码

安全情况:

js 监控iframe URL的变化实例代码

我们发现,如果跳转到危险页面,可以直接恢复旧页面,或者跳转指定安全页面,危险页面的js并不会执行。

这貌似就是我们想要的结果。

以上这篇js 监控iframe URL的变化实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
input、button的不同type值在ajax提交表单时导致的陷阱
Feb 24 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
Jul 05 Javascript
JS滚轮事件onmousewheel使用介绍
Nov 01 Javascript
JavaScript里四舍五入函数round用法实例
Apr 06 Javascript
JavaScript每天定时更换皮肤样式的方法
Jul 01 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
jQuery Easyui 验证两次密码输入是否相等
May 13 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
vue.js实现备忘录功能的方法
Jul 10 Javascript
Vue $mount实战之实现消息弹窗组件
Apr 22 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
Sep 18 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 #jQuery
浅谈原生JS中的延迟脚本和异步脚本
Jul 12 #Javascript
基于zepto.js实现手机相册功能
Jul 11 #Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 #Javascript
详解Webpack DLL用法以及功能
Jul 11 #Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
Jul 11 #Javascript
node使用UEditor富文本编辑器的方法实例
Jul 11 #Javascript
You might like
虫族 Zerg 历史背景
2020/03/14 星际争霸
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
js玩一玩WSH吧
2007/02/23 Javascript
js 表格隔行颜色
2009/12/02 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
python写xml文件的操作实例
2014/10/05 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
python 如何上传包到pypi
2020/12/24 Python
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
绩效工资分配方案
2014/01/18 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
php中pcntl_fork详解
2021/04/01 PHP
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL