您的位置:首页 > 其它

防篡改

2016-03-15 00:19 288 查看
防篡改: 对对象整体的保护

三个级别: 不可逆

1. 防扩展: 禁止扩展新属性

其实就是设置对象的Extensible属性为false

Object.preventExtensions(obj);

尝试扩展新属性: 禁用

2. 密封对象: 防扩展的基础上,禁止配置或删除每个属性

其实就是将每个属性的configurable设置为false

仅能读写属性值

Object.seal(obj);

尝试扩展新属性: 禁用

尝试修改属性的特性: **允许**

尝试删除: 禁止

尝试修改属性值: 允许

问题: chrome中,密封后依然可修改属性的特性

3. 冻结对象: 禁止对对象做任何修改,包括属性值

Object.freeze(obj)

尝试扩展新属性: 禁用

尝试修改属性的特性: 禁止

尝试删除: 禁止

尝试修改属性值: 禁止

eg:

<script>
"use strict";
var smith={id:1234,ename:"smith",age:19};
<span style="background-color: rgb(255, 0, 0);">//1:禁止扩展</span>
/*Object.preventExtensions(smith);
smith.salary=10000;
console.log(smith.salary);//undefined//每个属性的configurable=false
*/

<span style="background-color: rgb(255, 0, 0);">//2:seal密封,打包</span>
/*Object.seal(smith);
//尝试扩展新属性:已禁用
smith.salary=10000;
console.log(smith.salary);
//尝试修改属性的新特性,仍然可用
Object.defineProperty(smith,"id",{
writable:false//将id设置为只读,说明现在的浏览器对ES5的防篡改有漏洞
})
//尝试删除属性
smith.id=1001;
console.log(smith.id);
*/

<span style="background-color: rgb(255, 0, 0);">//3:冻结对象</span>
Object.freeze(smith);
//尝试修改属性值:已禁用

console.log(
Object.getOwnPropertyDescriptor(smith,"age");
);

//尝试扩展新属性
smith.salary=1000;
console.log(smith.);

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: