防篡改

防篡改: 对对象整体的保护
   三个级别: 不可逆
   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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值