2015-09-04 70 views
1

讓我解釋標題。是否可以安全地取消引用字符串

假設我們有一個包含密碼的字符串,當我們發送了這個密碼,例如BE哈希值和鹽值時,我們希望擺脫這個值。

這麼說來,這是不可行的:

var pw = 'somePw'; 
// later 
pw = 'someGarbage'; 

字符串是不可變的,所以我們不會重寫存儲器中的價值,但創建一個新的和舊的價值仍然存在於內存,但取消引用如此由GC解放,我們仍然可以立即擺脫它 - >不安全。

我該如何解決這個問題?

+0

你試圖解決什麼問題?只有能夠訪問機器的人才能夠轉儲內存。 – Barmar

+3

你沒有問題,你是過度工程。 – Tomalak

+0

我不認爲有任何方法可以訪問Javascript引擎的原始內存。 – Barmar

回答

0

我不確定JavaScript內部工作是如何工作的,它可能依賴於實現,但也許可以將該值存儲爲對象的屬性,然後刪除該屬性。由於刪除屬性會將其用於垃圾回收,並隨後釋放,但我不知道該值是否仍會存儲在內存中。

var passwordObject = { pass: "somepass" }; 

delete passwordObject.pass; 
+0

謝謝,我也認爲它可能會工作,但我不確定。使用delete是什麼意思?這是否意味着它會清除內存區域或將它標記爲「自由GCd」? –

+0

閱讀我最近的修改... – thephpdev

0

您可以將pw存儲在一個對象中,並在完成時使用它的刪除操作符。

var user = { 
    password: "pw" 
} 

delete user.password 

您還可以設置pw = null

這兩種方法都將釋放內存空間垃圾回收週期發生之後。

道格拉斯克羅克福德喜歡後面的方法,而不是第一個http://javascript.crockford.com/memory/leak.html ,因爲他解釋了與第一種方法相關的一些內存泄漏問題。但是我不認爲這些在現代瀏覽器中仍然是個問題。

相關問題