2016-09-15 147 views
1

我需要在Angular(Javascript)應用程序的內存中存儲刷新令牌。在Javascript/AngularJS中保護刷新令牌

令牌將在驗證後通過Ajax調用傳遞,然後需要存儲在內存中,直到用戶註銷或關閉瀏覽器爲止。

我現在想知道如何將此令牌安全地保存在內存中,因此無法通過控制檯訪問或可訪問該網頁的惡意瀏覽器插件來提取此令牌。

我發現瞭如何使用角刷新令牌一些其他的線程,但我想實現並不安全:

AngularJS - http interceptor - resend all request after token refresh

難道是安全的,如果我取代了authService設有私人對象存儲刷新和訪問令牌?

+0

你試圖保護它的威脅是什麼?請注意,它已經在客戶端上,所以您不能將其從用戶中隱藏起來。你有什麼攻擊想法? XSS也許? –

+0

是XSS或惡意瀏覽器插件或...?我不是這些事情的真正專家 – mvermand

+0

我想了一下,這實際上是一個很好的問題。我想知道其他安全人員會怎麼想,希望你能得到答案。 –

回答

1

我認爲有幾種不同的威脅可能需要保護存儲在內存中的敏感數據(比如JavaScript中的刷新令牌)。

想到的是您的數據被寫入磁盤。考慮一下像運行瀏覽器的個人電腦內存不足並開始交換,或者用戶決定進入休眠狀態。儘管在某些低級語言中,即使在交換時,您也可以停止操作系統將某些內存頁面寫入磁盤,但在Javascript中控制卻少得多,並且也無法防止(以任何語言顯示)休眠。

所以有一點要注意的是,你的敏感信息可能會以明文被寫入磁盤(除非有某種形式的磁盤加密),以及你不能做太多關於在Javascript中,我認爲。如果這是不可接受的,你可能不應該使用Javascript。

另一種類型的攻擊可能是攻擊者利用瀏覽器或操作系統漏洞訪問您的內存部分。你也不能對這些做太多的事情,你只需要相信操作系統和瀏覽器。

最後,還有應用程序級別的攻擊,主要是XSS。我認爲你可以在某種程度上防止這種情況發生,主要是通過以不會將其暴露給其他腳本的方式來存儲數據,例如在關閉中。 This article總和比我更好。

+0

「雖然在某些低級語言,你可以阻止交換,即使寫入特定的內存頁到磁盤操作系統」 ---你行嗎?內核不僅僅提供你訪問虛擬內存的權限嗎? – zerkms

+1

是的,但你可以懇請內核不把它與m鎖交換到磁盤,至少在Linux():http://man7.org/linux/man-pages/man2/mlock.2.html –

+0

我見, 謝謝.. – zerkms