javascript 对象的防篡改几种办法

前端开发:保护页面安全的方法 - 使用 JavaScript 防止用户修改页面代码 通过禁用右键菜单、禁用控制台、使用 JavaScript 严格模式以及检测代码篡改等方法,我们可以增加页面的安全性,并减少用户对页面代码的恶意修改。然而,需要注意的是,这些方法只能提供一定程度的保护,不能完全阻止高级用户或攻击者的篡改行为。用户可以通过浏览器开发者工具等手段修改页面的代码和内容,从而产生一些潜在的安全风险。尽管我们无法完全阻止用户修改页面的代码,但我们可以使用一些技术来检测页面代码是否被篡改。启用严格模式后,编写的代码将会受到更加严格的规范限制,减少了一些潜在的安全风险。 阅读详情

1、不可扩展对象

默认情况下对象都是可以扩展的,也就是说,任何时候都可以向对象中添加属性和方法。现在使用Object.preventExtensions(object)方法可以改变这个行为,让你不能再给对象添加属性和方法。例如:

var person={name : 'jack'};
Object.preventExtensions(person);
person.age=13;
console.log(person.age);///undefine

虽然不能给对象添加新成员,但是已有的成员则丝毫不受影响,你仍然可以修改和删除自己的已有的成员。另外使用isExtensible()方法还可以确定对象是否可以扩展。例如:

var person={name : 'jack'};
alert(Object.isExtensible(person));//true

Object.preventExtensions(person);
alert(Object.istExtensible(person));//false

2、密封的对象
ECMAScript 5 为对象定义的第二个保护级别是密封对象。使用Object.seal(object)方法可以将对象改为密封对象。密封对象不可扩展,而且已有成员的[[configurable]]特性将被设置为false。这就意味着不能删除属性和方法,因为不能使用Object.defineProperty()把数据修改为访问其属性,或者相反。但是属性值是可以修改的。

var person = {name:'tom'};
Object.seal(person);
person.age=12;
console.log(person.age);//undefine

delete person.name;
console.log(person.name);//tom

person.name="jack";
alert(person.name);//jack

使用Object.isSealed()方法可以确定对象是否被密封了,因为被密封的对象也是不可扩展的,所以使用Object.istExtensible()检测密封对象也会返回false(即不可扩展)

var person = {name:'tom'};
alert(Object.isExtensible(person));///true,可扩展
alert(Object.isSealed(person));////false,未加密

Object.seal(person);
alert(Object.isExtensible(person));///false,不可扩展
alert(Object.isSealed(person));////true,已经加密

3、冻结的对象

最严格的的防止篡改级别的是冻结对象,冻结的对象既不可扩展,又是密封的,而且对象的数据属性的[[Writable]]特性会被设置为false,如果定义set函数,访问器属性仍然是可写的,现在使用Object.freeze(object)方法可以将对象改为冻结的对象。

var person={name : 'tony'};
Object.freeze(person);
person.age=12;
alert(person.age);//undefine

delete person.name;
alert(person.name);//tony

person.name = 'jack';
alert(person.name);//tony

使用Object.isFrozen()方法可以检测对象是否是冻结对象,因为冻结对象既是不可扩展对象,又是密封的对象,所以用isExtensible()
和Object.istExtensible()检测冻结对象将分别返回false和true,

var person = {name:'tom'};
alert(Object.isExtensible(person));///true,可扩展
alert(Object.isSealed(person));////false,未加密
alert(Object.isFrozen(person));////false,未加密

Object.seal(person);
alert(Object.isExtensible(person));///false,不可扩展
alert(Object.isSealed(person));////true,已经加密
alert(Object.isFrozen(person));////true,已经冻结
JavaScript创建防篡改对象的方法分析 主要介绍了JavaScript创建防篡改对象的方法,结合具体实例形式分析了javascript基于不可扩展对象、密封的对象和冻结的对象实现防篡改对象的相关操作技巧,需要的朋友可以参考下 立即下载

相关推荐

避坑指南:CentOS7.9安装Python3.8.16后yum报错的快速修复方法

本文详细解析了在CentOS7.9系统安装Python3.8.16后导致yum报错的原因,并提供了快速修复方法。通过修改yum配置文件指向Python2解释器,以及使用alternatives工具管理多版本Python,有效解决兼容性问题。同时推荐使用虚拟环境隔离开发环境,避免影响系统稳定性。

weixin_26908317的博客 496

javascript防篡改对象

javascript防篡改对象这个东西吧,用到的很少,个人感觉用处不大,但是,可以作为装逼的利器,哈哈,开搞。。1、不可扩展对象默认情况下对象都是可以扩展的,也就是说,任何时候都可以向对象中添加属性和方法。现在使用Object.preventExtensions(object)方法可以改变这个行为,让你不能再给对象添加属性和方法。例如:var person={name : 'jack'}; Obje

德莱问的博客 1084

告别FreeRTOS?手把手带你用NuttX在STM32F4-Discovery上跑起第一个Shell

本文详细介绍了如何在STM32F4-Discovery开发板上从FreeRTOS迁移到NuttX,并运行第一个Shell。NuttX以其完整的POSIX兼容性和模块化架构优势,特别适合复杂网络应用的开发。通过环境搭建、移植配置、调试技巧及POSIX开发实践,帮助开发者高效构建嵌入式系统。

weixin_42526417的博客 299

JS中如何使对象或者属性不能被改变?有几种方法呢?

Javascipt中如果想使得对象或属性不能被修改,有很多种方式,下面由对象冻结的深浅程度,依次记录(由浅入深)。 1. Object.preventExtensions Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。 let obj = {} Object.preventExtensions(obj) obj.name = 'liderder' console.log(obj); 我们可以看到,obj中没有添加na

weixin_45460053的博客 5317

SAP中错记虚拟利润中心的调整,冲销处理实例

我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 1796

使用CLion在Window端进行linux开发

        以往不管是开发x86端linux程序还是arm端linux程序,都是使用Source Insight作为源码编辑工具的,如下图      去年底,发现CLion的2018.3更新版本,可以支持remote host开发了,大爱!     我是基于以下几点原因,将开发工具换成CLion 1. 语法高亮较明显、跳转、重构方便(我很看重这个); 2. 可以使用图形界面进行调...

alist的笔记专栏 1万+

JS中,保护对象的操作(即阻止增、删、改的操作)

阻止 新增 属性:Object.preventExtensions() 阻止 增删 属性:Object.seal() 阻止 增删改 属性:Object.freeze() <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge...

m0_66051368的博客 1362

STC8H8K64U ADC采样实战:从蜂鸣器控制到电压测量(附完整代码)

本文以STC8H8K64U单片机为核心,通过两个实战案例详细讲解ADC采样的应用。首先介绍如何利用ADC采样值动态控制蜂鸣器响度,实现模拟PWM效果;其次深入探讨高精度外部电压测量的方法,包括硬件连接、两点校准技巧以及软件滤波,旨在帮助开发者从理论到实践全面掌握ADC功能。

weixin_29159441的博客 562

js 禁止修改变量:冻结已有对象的属性:Object.defineProperty()

`Object.defineProperty()`的使用 / value: 2 // 定义该属性的值。// 是否出现在对象的枚举属性中。// 是否可以被删除。// 是否可以被修改。

全易 705

PSINS工具箱学习(四)捷联惯导更新算法

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-Learning。

实践出真理,接毕设/课设项目开发指导 607

Open3D 计算点云的倒角距离(Chamfer Distance)【2025最新版】

;Chamfer Distance距离可以计算生成点云数据与标签点云数据之间的平均最短点距离。Open3D可以直接用来计算点云的Chamfer Distance距离。博客长期更新,本文最近一次更新时间为:2025年2月18日。

点云侠的博客 3254

JavaScript对象防篡改

概念 首先所有对象在默认情况下都是可篡改的,可以进行相应的防篡改操作 防篡改的对象包含三种 不可添加新属性和方法,但可修改原有属性 叫不可拓展对象 不可删除,添加,但可修改 叫密封对象 完全不可操作,包含删除,添加,修改 叫冻结对象 几个方法 不可拓展对象 Object.preventExtensions() var obj = { name: '123' } Object.preventEx...

lm_four的博客 356

基于Simulink的强化学习(DQN)自主调节占空比

摘要:本文介绍了一种基于Simulink的强化学习(DQN)方法,用于Buck变换器的自主占空比调节。通过建立马尔可夫决策过程模型,设计了包含状态、动作和奖励函数的强化学习框架,并在Simulink中实现了Buck主电路、RL接口模块和DQN智能体的集成。实验表明,相比传统PID控制,DQN方法在负载突变和输入跌落等复合扰动下表现出更好的鲁棒性,电压超调小于1%,恢复时间缩短至0.3ms。文章还详细讨论了关键设计技巧、工程挑战及对策,并提出了多目标优化、先进算法应用等扩展方向,为智能电源控制提供了新思路。

amy_mhd的博客 75

JavaScript之防篡改对象(高级技巧)

在实际开发中,有时会无意地修改了别人的代码,或者用不兼容的功能重写原生对象,这样会给整个开发带来困扰。

但愿人长久 千里共婵娟 3968

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JS防篡改对象

1. 一级保护措施:不可扩展对象 在默认情况下,所有对象都是可以扩展的,也就是说,无论什么时候都可以向对象中添加属性和方法。 例如以下,先定义一个对象,再向其添加一个新属性: `var obj = { name: "Tom" } obj.age = 20; console.log(obj.age); //20` 即使先定义好一个对象,后面也可以向其新添加属性和方法。 1.1 Objec...

在这个数字革命的时代,我们将引领您穿越去中心化、智能合约、加密货币以及分布式应用程序的世界。无论您是初学者还是经验丰富的区块链开发者,我们都致力于为您提供有价值的信息和见解。 341

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JavaScript 性能优化之防篡改对象

我们在开发中有时候会不经意的修改了别人的代码,可能会造成严重的后果,于是ES5定义了防篡改对象。但是要注意,一旦把对象定义为防篡改对象,就无法撤销了。 不可扩展对象 默认情况下,所有对象都是可以扩展的。也就是说,任何时候都可以向对象中添加属性和方法。比如: var person = { name: "阿清" } person.age = 14; console.log(person);//{name: "阿清", age: 14}

wzg0817的博客 344

JavaScript防篡改对象

防篡改是什么 定义的对象默认在任何时候、任何位置,无论有意义还是无意义的都可以修改对象的属性和方法。 而这些篡改可能会影响对象的内置属性或方法,从而导致对象的正常功能可能无法使用。 JavaScript在ECMAScript 5 版本中新增了放置篡改对象的属性或方法的机制,共提供了以下三级保护方式: 禁止扩展:禁止为对象扩展新的属性或方法 密封对象:禁止扩展新的属性或方法,禁止置现有的属性或方法的描述符,仅允许读写属性的值。 冻结对象:禁止对对象执行任何修改操作。 禁止扩展 如果禁止为对象扩展新的属性或

qq_46670991的博客 320

js-防篡改对象

对于JS库的作者而言,冻结对象是很有必要的。因为js库最怕有人意外(或有意)的修改库中的核心对象。冻结(或密封)主要的库对象能够防止这些问题的发生。

qq_38629292的博客 957

js高级技巧之防篡改对象

由于js共享的本质,开发人员很可能会意外地修改别人的代码。所有ECMAScript5可以定义防纂改对象。 注意:一旦把对象定义为防篡改,就无法撤销了。 防篡改对象有三个级别,分别是不可拓展对象、密封对象和冻结对象。 1.不可扩展对象 Object.preventExtensions(person);//设置为防拓展对象

yingzizizizizizzz的专栏 1944

深入理解javascript之防篡改对象

javascript中对象内置有多个属性Configurable,Writable,Enumerable,Value,Get和Set,来控制属性的行为。同样的ES5也有几个方法,来指定对象的行为。我们知道,javascript中的对象是可以共享的,也是默认可拓展的://一旦将对象设置防篡改,就不能撤销了 //众所周知,一般的对象是可以随意拓展的 var person = {name:'liufang

brizer的博客 1583

JS高级技巧 - 防篡改对象

防篡改对象 JS是若类型语言,变量和对象都可以被同一个运行环境中的代码修改掉;开发人员很可能会意外地修改别人的代码; 在[理解对象],【属性类型】的介绍里,对象可以手工设置每个属性的 [[Configurable]] 、[[Writable]] 、 [[Enumerable]] 、 [[Value]] 、 [[Get]] 以及 [[Set]] 特性,以改变属性的行为。 ECMAScript 5也增...

chenmozhongzong的博客 675

防篡改对象

JavaScript多人开发协作过程中,很可能会意外篡改他人代码。防篡改对象,通过不可扩展、密封、冻结来解决这个问题。 需要特别注意的是:一旦把对象定义为防篡改,就无法撤销了。 1、不可扩展对象 1 var person = { 2 name: "Person Name" 3 } 4 Object.preventExtensions(person); 5 6...

sayUonly的博客 254

js 防篡改对象

简单介绍一下js的防篡改对象: (1)不可扩展对象(不能添加,可以修改和删除) 默认情况下,所有对象都是可扩展的。即任何时候我们都可以为对象添加属性和方法。但使用Object.preventExtensions()方法可以改变这一默认行为,即不能再为对象添加新的属性和方法,但是仍然可以修改和删除已有成员。另外,可以使用Object.isExtensible()方法检测对象是否可以扩展。 (2...

kaixuanweb的博客 722

搞懂JavaScript中的防篡改对象

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼 写在前面 我们在实际的开发中,可能需要自己封装 API ,如果供人使用的话,可能是禁止修改我们自己定义的对象的,JavaScript 中就给我们提供了这种防篡改机制。 防篡改是什么 定义的对象默认在任何时候、任何位置,无论有意义的还是无意义的都可以修改对象的属性或方法。而这些篡改可能会影响对象的内置属性或方法,从而导致对象的正常功能可能无法使用。 JavaScript 在 ECMAScript5 版本中新增了放置篡改对象的属性或方法的机制,共提.

一碗周 442

防篡改

防篡改: 对对象整体的保护    三个级别: 不可逆    1. 防扩展: 禁止扩展新属性 其实就是设置对象的Extensible属性为false Object.preventExtensions(obj);         尝试扩展新属性: 禁用    2. 密封对象: 防扩展的基础上,禁止配置或删除每个属性 其实就是将每个属性的configurable设置为false    

java_zhaoyanli的专栏 2799
上一篇: select2下拉框的显示及隐藏
下一篇: CSS 弹性布局的使用方法,及子元素flex属性的解析
haogemr
博客等级 码龄9年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值