JavaScript——劫持
概念:
函数劫持,顾名思义,即在一个函数运行之前把它劫持下来,添加我们想要的功能。当这个函数实际运行的时候,它已经不是原本的函数了,而是带上了被我们添加上去的功能。这也是我们常见的钩子函数的原理之一。
劫持方法有以下几种:
1. 黑客劫持
就是劫持网络数据包 ,然后暴力解码(逆向工程) , 窃取个人隐私数据 (此种方法感兴趣可以网上自学)
2. 系统内置功能的重写
就是将系统内置函数功能修改为自己想要实现的功能;也就是系统内置函数的改写
var _log = console.logconsole.log = function(str) {_log(str + " xiao zhang tong xue")}console.log("hello")
比如上面就是通过对console.log方法的重写,来实现无论用console.log方法来打印什么,打印出来的结果都会加上" xiao zhang tong xue"这个字符串。
3. this关键字的引用劫持
就是通过函数的一些特殊方法来自己指定函数的调用者
1. this的劫持1 —— call()方法
var obj = {name: "kang",fun: function(n1, n2) {var age = n1var height = n2console.log(this.name)console.log(age)console.log(height)}}var obj2 = {name: "xiao zhang"}obj.fun.call(obj2, 21, 180)
上述就是通过函数的call方法将对象obj中fun方法的调用者改写为对象obj2,也就是将fun方法中的this指向改为obj2,所以最终打印出来的this.name就是obj2的name: xiao zhang。
2. this的劫持2 —— apply() 方法
var obj = {name: "kang",fun: function(n1, n2) {var age = n1var height = n2console.log(this.name)console.log(age)console.log(height)}}var obj2 = {name: "xiao zhang"}obj.fun.apply(obj2,[21,180])
apply()方法和call()方法的作用和用法基本一致,唯一的区别是call方法的参数是直接放进去,用逗号隔开,而apply方法的所有参数必须放在一个数组中再传入。
这种方法也可以用来比较纯数字数组中的元素的最大值和最小值:
var arr = [10,230,40,6,2,5,3]var maxnum = Math.max.apply(arr,arr) //相当于arr.max(10,230,40,6,2,5,3)var minnum = Math.min.apply(arr,arr)//相当于arr.min(10,230,40,6,2,5,3)console.log("max number = " + maxnum)console.log("min number = " + minnum)
3. this的劫持3 —— bind()方法
var obj = {name: "xiao zhang"}var obj2 = {name: "kang",fun: function(n1, n2) {var age = n1var height = n2console.log(this.name)console.log(age)console.log(height)}.bind(obj)}obj2.fun(21, 180)
bind()方法就是在函数设计的时候就指定函数的调用者,也就是指定函数中this的指向;其参数传入形式和call方法一样,是直接传入参数。
JavaScript——劫持相关推荐
- 【web-攻击用户】(9.4)跨域捕获数据——通过注入HTML捕获数据、注入CSS捕获数据、JavaScript劫持
目录 跨域捕获数据 1.1.简介: 1.2.通过注入HTML捕获数据 简介: 示例: 1.3.通过注入CSS捕获数据 简述: 1.4.JavaScript劫持 简述: 函数回调 JSON 变量分配 E ...
- 20个将 JavaScript 用到极致的网站
浏览器正变得越来越强大,上面有各种丰富的功能可以供开发者选择,一些在几年前几乎难以想象的功能都已经一一实现.有了这些新功能,开发者现在能够开发出 更精细.更复杂.更有想象力的用户界面了.这为网站开发扫 ...
- JavaScript/Ajax/JQuery知识点(BOM/DOM/ScriptEngine/JS引擎),JSCore
捋顺JavaScript底层知识,重点讲解如原型.作用域.执行上下文.变量对象.this.闭包.按值传递.call.apply.bind.new.继承等难点概念?? JS中的继承?JS的原型模式, ...
- dns劫持广告原理及解决办法、dns劫持广告怎么办
DNS 广告劫持(属于DNS污染) 其实这不是一个新概念了,在几年前,中国一些不讲道德的运营商,尤其是地方运营商就开始捕捉用户浏览器的访问记录,然后根据不同用户的访问行为,有 选择地往用户访问的网页里 ...
- DNS 广告劫持(属于DNS污染)
其实这不是一个新概念了,在几年前,中国一些不讲道德的运营商,尤其是地方运营商就开始捕捉用户浏览器的访问记录,然后根据不同用户的访问行为,有 选择地往用户访问的网页里面推送广告.因为运营商掌握着DNS主 ...
- 分享一下:2011回顾:20个将JavaScript推到极致的网站(转)
对于浏览器上的开发者来说,2011年又是相当精彩的一年.web开发者Phil Hawksworth在这篇文章中总结了web 上经典的JavaScript用法. 那些喜欢冒险体验前沿技术的开发者现在应该 ...
- ajax在Xss中的利用,XSS高级利用
点击阅读 利用 xss 的 javascript 劫持 一个 xss 漏洞示例页面 1 2 3 4 5 6 7 8 9 10 $xss = @$_GET['xss']; if($xss!==null) ...
- 一篇文章带你详解 HTTP 协议之报文首部及字段详解(中)
在上一篇中,我们已经讲解了一到五的内容,还没看过的可以先看, 下面接着讲剩余内容: 六.HTTP 报文首部之首部字段(重点分析) 七.HTTP 响应状态码(重点分析) 八.HTTP 报文实体 九.与 ...
- (chap6 Http首部) 为Cookie服务的首部字段
Cookie的工作机制是用户识别及状态管理.Web 网站为了管理用户的状态会通过Web浏览器,把一些数据临时写入用户的计算机内.接着当用户访问该Web网站时,可通过通信方式取回之前发放的Cookie. ...
最新文章
- NLP 解决方案是如何被深度学习改写的?
- Python高级网络编程系列之第二篇
- linux配置caffe环境,最全caffe安装踩坑记录(Anaconda,nvidia-docker,linux编译)
- 每天一个linux命令(9):touch 命令
- org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [xx]
- APUE读书笔记-12线程控制-04同步属性
- 几种常用的JS类定义方法
- 应对无协议脱欧 葡萄牙机场将为英籍旅客设快速通道
- 蓝桥杯第三届省赛JAVA真题----取球博弈
- 1.安装flink-1.12.2
- 《Algorithms》Comparable 实现插入排序
- Nginx常见问题(优化)
- NSGA-II 算法详解
- VS2013添加反编译工具-ILDasm
- 大会回顾丨游戏用户体验优化如何实践,看大咖怎么说(附PPT下载)
- 传音控股再度携手联合国难民署 驰援非洲儿童教育事业
- 微信开发者工具测试小程序
- C语言实现物品竞拍管理系统
- 使用IPC扫描器进行网络扫描
- 超级隐蔽的小说阅读器
热门文章
- Redis配置成windows服务方法
- 感知损失(perceptual loss)详解
- 电影推荐 - 实习生
- 厦门大学计算机保研学校,郑炜-厦门大学计算机科学系
- OutputDebugString完美封装
- 7年java水平_7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷
- 并发编程实战-MESI缓存一致性协议
- 助力战“疫”,主“力”生产:伊利的战“疫”平衡术
- 【UE4】动画插入{角色移动、死亡}(混合空间,状态机)
- 7.12每日股市晚评