2015-06-09 62 views
0

如果你有一個變量設置敏感數據:覆蓋可變內容的JavaScript

var secretPassword = 'myPa$sW0rd'; 

,你覆蓋它:

secretPassword = '0000000000'; 

做了一個JavaScript引擎分配新的內存爲新的數據?數據myPa $ sW0rd可能在未分配內存中的某處仍然存在? 我的主要問題是:有沒有辦法保證你覆蓋數據? (即零出或安全刪除數據)。我想知道是否循環遍歷字符串中的字符並重新設置它們。

我想這是不太可能,你將能夠訪問數據,而一些bug的JavaScript引擎。

+3

即使是有保證的,這種低級別的安全性是徒勞的在javascript:什麼是說任何人讀取或修改secretPassword的你得到它之前? – doldt

+0

要了解UI級別的安全性是多麼徒勞,在它創建一個密碼字段的網頁,在鍵入密碼,然後,在控制檯中,運行以下命令:'警報(的document.getElementById(THE_PASSWORD_FIELD_ID).value的);' – talemyn

+0

謝謝你們,我不擔心這些事情。當你存儲憑證時,他們必須存儲在某個地方。我只是想的更多,當用戶在相同的特權升級不再驗證,或者至少不是(爲什麼讓他們比必要升級更長)。希望確保它們可能在未分配的內存中,就像我想的那樣(即使在重置變量之後)。 – Mike

回答

0

嘗試使用固定大小的陣列,並且分配0值到上清理所有元素。這不會重新分配新對象。

然而,這將是難以控制其中的值傳遞周圍,一旦你使用它作爲一個字符串。

1

做了一個JavaScript引擎的新數據分配新的內存?

是數據邁帕足球俱樂部$ sW0rd在未分配的內存還是有可能的地方?

是,如果沒有垃圾收集清理了

我的主要問題是:有沒有辦法保證你覆蓋數據? (即零出或安全刪除數據)。

不是真的,如果你與垃圾回收器播放時除外。請參閱related post

我想知道是否循環遍歷字符串中的字符並重新設置它們。

沒有

編輯:正如doldt指出的那樣,是即使以前的數據仍然是在某處內存沒有真正的安全威脅。

+0

那麼你是說循環和設置每個字符也分配新的內存?其實我有點驚訝。我太懶了(也許不是那*有興趣)看javascript引擎代碼。 – Mike

+0

你可以鏈接到關於此行爲的一些資源或實現細節嗎? – doldt

+0

是循環將分配新的內存。沒有必要查看JavaScript引擎代碼。只要相信規範:[鏈接](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management) – couettos