JavaScript防篡改物件

qq_46670991發表於2020-10-31

防篡改是什麼

定義的物件預設在任何時候、任何位置,無論有意義還是無意義的都可以修改物件的屬性和方法。

而這些篡改可能會影響物件的內建屬性或方法,從而導致物件的正常功能可能無法使用。

JavaScript在ECMAScript 5 版本中新增了放置篡改物件的屬性或方法的機制,共提供了以下三級保護方式:

  1. 禁止擴充套件:禁止為物件擴充套件新的屬性或方法
  2. 密封物件:禁止擴充套件新的屬性或方法,禁止置現有的屬性或方法的描述符,僅允許讀寫屬性的值。
  3. 凍結物件:禁止對物件執行任何修改操作。

禁止擴充套件

如果禁止為物件擴充套件新的屬性或方法,需要修改物件屬性的extensible為false。

  • Object.preventExtensions()方法用於設定指定物件不可擴充套件,即不能新增屬性或方法。
  • Oject.isExtensible()方法判斷一個物件是否是可擴充套件的(是否可以在他上面新增新的屬性。

密封物件

指禁止擴充套件新的屬性或方法,禁止置現有的屬性或方法的描述符

  • Object.seat()方法用於封閉一 個物件,阻止新增新屬性井將所有現有屬性標記為不可配置。當前屬性的值只要可寫就可以改變。
  • Object.isSealed()方法判斷一 個物件是否被密封。

凍結物件

  • Object.freeze()方法用於凍結一 個物件 ,凍結指的是不能向這個物件新增新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該物件已有屬性的可列舉性、可配置性、可寫性。該方法返回被凍結的物件。
  • Object.isErozen()方法判斷一 個物件是否被凍結。

相關文章