有時候我們寫了乙個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 考慮登入頁面是否有登入錯誤的限制,例如多次登入失敗是否可以鎖定系統 是否有驗...