数据劫持详解(JavaScript)

Posted 曾胖神父

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据劫持详解(JavaScript)相关的知识,希望对你有一定的参考价值。

什么是数据劫持?

定义

数据劫持,其实就是数据代理。
数据劫持,指的是在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果。

Demo

使用Object.defineProperty实现数据劫持

代码如下

var obj=;
var age;
/**Object.defineProperty() 方法会直接在一个对象上定义一个新属性
,或者修改一个对象的现有属性,并返回此对象。形参1即为对象,形参2为属性名(注:这种行为也被称之为数据劫持)
**/
/**
 * 数据劫持概念
数据劫持,其实就是数据代理。
数据劫持,指的是在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果。 
 */
Object.defineProperty(obj,'age',
    get:function()
        console.log('get age ...');
        return age;
    ,
    set:function(val)
        console.log('set age ...');
        age=val;
    
)
obj.age=100 //set age ... 调用set函数
console.log(obj.age) //get age ... ,100 调用get函数

使用Proxy实现数据劫持

代码如下

const dinner=
    meal:'tacos'

const handler=
   //Reflect 是一个内置的对象,它提供拦截 javascript 操作的方法。
   //arguments为函数参数
    get(target,prop)
       console.log('get...',prop);
       //Reflect.get函数,作用为获取对象身上某个属性的值,类似于target[name]
       return Reflect.get(...arguments);
    ,
    set(target,key,value)
    
        console.log('set...',key,value);
        //Reflect.set函数,作用为将值分配给属性的函数,返回一个Boolean,如果更新成功,则返回true
        return Reflect.set(...arguments);
    


//Proxy对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找,赋值,枚举,函数调用等)
//Proxy对象接收两个形参,第一个形参为劫持的目标对象,第二个形参为处理函数
const proxy=new Proxy(dinner,handler);
console.log(proxy.meal);

以上是关于数据劫持详解(JavaScript)的主要内容,如果未能解决你的问题,请参考以下文章

javascript中callapplybind详解

十二月份阅读书单

详解DNS服务DNS解析DNS劫持和污染

中等难度Vue 面试题+详解答案

Dll劫持漏洞详解

逆向调试简书网页劫持分析,使用 Chrome DevTools 调试 JavaScript 技巧,利用 CSP 预防劫持