防篡改

来源:互联网 发布:软件著作权第一作者 编辑:程序博客网 时间:2024/05/16 00:49
防篡改: 对对象整体的保护
   三个级别: 不可逆
   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>


0 0
原创粉丝点击