JS關於物件的安全性之擴充套件,密封,凍結

2021-08-02 08:45:44 字數 1696 閱讀 7525

有時候我們寫了乙個js庫,裡面有一些核心物件,我們希望在開發過程中這個核心物件不被修改,這時候就要防止該物件被篡改。object上有三個方法可以使用

var bar=;

object.preventextensions(bar);

bar.test="test"

;console.log(bar.test)//undefined

這時候可以看到雖然給bar新增了屬性test,但是仍然為undefined,當然這是在非嚴格模式下,嚴格模式下將丟擲錯誤。

但是對該物件屬性進行修改或者刪除還是可行,只是擴充套件受到了限制

bar.name='aenvgiell';

console.log(bar.name)//aenvgiell

delete bar.age;

console.log(bar.age);//undefined

可以使用

object.i***tensible(obj)來檢視某個物件是否是可擴充套件的,返回是乙個布林值。

object.i***tensible(bar)//false
密封的物件是不可擴充套件的,在此基礎上,他也不能刪除屬性,但是可以修改屬性

var bar=;

object.seal(bar);

bar.test="test"

;console.log(bar.test)//undefined

delete bar.name

console.log(bar.name)//"kasol"

這時候可以看到雖然給bar新增了屬性test,但是仍然為undefined;雖然刪除了屬性name,但是name依然存在。同樣這是在非嚴格模式下,嚴格模式下將丟擲錯誤。

但是對該物件屬性進行修改是可行的

bar.name='aenvgiell';

console.log(bar.name)//aenvgiell

可以使用

object.issealed(obj)來檢視某個物件是否是密封的,返回是乙個布林值。

object.issealed(bar)//true
凍結的物件是密封的,在此基礎上,他也不能修改屬性

var bar=;

object.freeze(bar);

bar.test="test"

;console.log(bar.test)//undefined

delete bar.name

console.log(bar.name)//"kasol"

bar.name="aenvgiell"

;console.log(bar.name)//"kasol"

這時候可以看到雖然給bar新增了屬性test,但是仍然為undefined;雖然刪除了屬性name,但是name依然存在;修改了屬性name但是也沒有生效。同樣這是在非嚴格模式下,嚴格模式下將丟擲錯誤。

可以使用

object.isfrozen(obj)來檢視某個物件是否是凍結的,返回是乙個布林值。

object.isfrozen(bar)//true
以上可以看出,防止篡改物件的嚴格優先順序從高到低依次是

凍結》密封》擴充套件

JS關於物件的安全性之擴充套件,密封,凍結

有時候我們寫了乙個js庫,裡面有一些核心物件,我們希望在開發過程中這個核心物件不被修改,這時候就要防止該物件被篡改。object上有三個方法可以使用 可以使用 object.i tensible obj 來檢視某個物件是否是可擴充套件的,返回是乙個布林值。密封的物件是不可擴充套件的,在此基礎上,他也...

關於系統安全性的幾個概念

民用飛機設計是一項複雜的系統工程,自頂向下的設計邏輯通常包括飛機級和系統級,然後再向下劃分。飛機的系統包括通訊 電源 內飾 防火 飛控 燃油 液壓 防冰除雨 導航 氧氣 氣源 水廢水 apu 艙門以及動力裝置,系統安全性在設計過程中具有十分重要的地位,涉及到的相關基本概念包括 pssa prelim...

關於安全性測試考慮的點

1 在登入頁面要考慮所輸入的密碼是否為加密的,且密碼是不能複製的。2 考慮某些關鍵url是否在非登入狀態是不可訪問的。3 考慮是否存在sql注入 html注入。例如輸入一些sql語句或者html js這些 是否會被執行。4 考慮登入頁面是否有登入錯誤的限制,例如多次登入失敗是否可以鎖定系統 是否有驗...