2014-04-24 34 views
0

今天用於JavaScript的加密庫存在sjcl,因此可能存在密碼/密鑰/祕密/敏感數據存儲在JavaScript中某個變量的某處的情況。有沒有辦法在JavaScript中可靠地刪除/擦除變量(即密鑰/密碼)?

我不想冒這個敏感數據泄漏/泄露的風險,因此我非常想知道是否有一種方法可以在Javascript中可靠地擦除變量,以便JavaScript引擎使用的內存不會有關於他的數據的任何其餘信息?例如,我不想依靠某些GC來懶惰地擦除數據等。

答案可能包含殺死/擦除變量的示例代碼,以及何時解釋(以及如果JavaScript實現方式存在差異瀏覽器類型/ Nodejs)它確信相信數據已被刪除?

否則,如果任務是不可能的我將不勝感激一個解釋爲什麼會是這樣的好,也接受這個作爲一個答案

的目的不是爲了保護網頁的用戶訪問腳本變量(這不可能是我猜)。目標更多的是保證javascript引擎的內存不會在需要的地方保留數據的影子/緩存副本。我確實希望數據消失,因此沒有人(攻擊者軟件)可以通過查看與Javascript變量關聯的內存來獲取祕密數據。

+0

http://stackoverflow.com/questions/1596782/how-to-unset-一個JavaScript的變量 – Duniyadnd

+0

@Duniyadnd謝謝,quesiton已經有一些擴展功能,我在這裏查詢。我還看到了這個問題的不同之處,即查詢數據如何從內存中擦除,而不僅僅是從JavaScript可訪問的內存中擦除。我想覆蓋數據,但不會讓訪問變得困難。我想要緩存中的數據 – humanityANDpeace

+1

不,沒有。有一個名爲SES(Secure ECMAScript)的變體,它爲您提供了這些保證(Mark Miller有關它的有趣的論文,您應該閱讀)。不喜歡瀏覽器。沒有。 –

回答

1

JavaScript被垃圾收集。另外,沒有內建確定性資源管理的機制。您可以創建一個,但資源必須是外部的。

即使你構建了這樣一種機制(例如在Node中有一個C++外部模塊),引擎在內存拷貝被清除時不會給你強有力的保證。您必須手動分配到資源數據的相同變量部分,並自己將其替換爲垃圾。那可能工作,但仍然沒有保證在引擎級別。

這根本不是一個問題JavaScript實現的目的是在這方面做得很好。沒有SecureString。這就是說 - smart people正在處理ECMAScript(JS標準)的變體,這些變體爲您提供了更強大的保證。這是解決問題的好的第一步(但目前還沒有這樣的保證)。

我甚至不想開始瀏覽器,瀏覽器擴展可以輕鬆獲得比您更好的鉤子,並通過編寫Function.prototype.call並掛鉤每個函數調用,JavaScript具有相當強大的AOP功能,更糟糕的是,實例。

一個可能的解決方案是在一個使用加密RAM的虛擬機中運行整個程序,但我反對像這樣滾動自己的加密。通常,攻擊者不應該首先訪問程序的RAM,如果他們這樣做,他們可以安裝瀏覽器擴展:)

相關問題