2016-09-15 152 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