2011-05-12 47 views
12

我正在编辑:移动网络应用程序它显示一些敏感信息,并需要一个登录名将会员用户名和密码存储在HTML5会话中。用户名和密码当前以未加密状态存储,原因是我们需要在每个页面加载时使用此用户名和密码来访问客户端远程Web服务。HTML5客户端数据加密 - 我有什么选择?

编辑:安全审查后,我们的客户提出了以下关注:

“有是会话存储的信息会存储在磁盘上(例如,在浏览器崩溃)的潜在为此没有任何敏感信息应在会话存储器中以未加密方式存储,因为会话超时被实现,用户ID和会话令牌可以被存储,但不建议存储密码/ PIN。

加密和解密存储在客户端的敏感数据的最佳/最安全的方法是什么?

谢谢!

+0

安全反对什么?客户端攻击?运送中的攻击?答案会因此而大不相同。 – Piskvor 2011-05-12 09:42:25

+0

@ Piskovar-客户安全团队的一名成员提出了一个特别的问题:“Session Storage信息可能存储在磁盘上(例如,浏览器崩溃)。因此,不应该有敏感信息在会话存储器中以未加密方式存储,因为会话超时已实现,所以可以存储用户ID和会话令牌,但不建议存储密码/ PIN。 – TGuimond 2011-05-12 09:45:19

+1

啊哈,谢谢你的澄清。 – Piskvor 2011-05-12 09:46:20

回答

2

看到这个HTML5 Web DB Security

客户端加密库 还不够成熟或测试不够好

...但它已经在一年前,这样可能是假的已经

10

嗨,而不是存储用户名和密码,你不能创建某种类型的“会话”与远程服务器,而是传输身份验证令牌?

在客户端的任何位置存储用户名和密码都会让我感到不适。

也许正在寻找安全地存储用户名/密码的方法,寻找消除所有需要的方法。

然而,当然我不知道整个背景是在说这个......我猜测有一个很好的理由需要存储用户名/密码。

+1

我们需要每个页面加载的用户名/密码的原因是,我们必须使用它来从每个页面加载的远程Web服务加载数据。我们的客户不愿意在这个要求上做出决定:( – TGuimond 2011-05-12 09:59:57

+0

@TGuimond一个棘手的问题,Web服务是否有任何其他身份验证方法可用?您可以使用Windows身份验证进行身份验证吗? – 2011-05-12 10:41:49

3

Firefox工程师David Dahl有一个原型的Firefox扩展,domcryptrepository on github),它提供了对JavaScript的NSS(网络安全服务)API的访问。由于Chrome也使用NSS,因此提供相同的API可能也很简单。

他的pushing Mozilla为了最终融入到Firefox中而进一步发展;我们会看到会发生什么。

+0

@David Dahl:我完全忘了提及它一个移动浏览器的网络应用程序,所以我们仅限于智能手机浏览器。 – TGuimond 2011-05-12 10:02:14

2

最近我正在研究这个话题。我想现在我们确实有一些经过验证的JS加密库,参见herehere

现在问题是在哪里存储密钥。将它存储在客户端将与存储没有加密的数据相同。并且让用户始终输入密钥会破坏目的。

也许你可以让你的服务器在你创建一个新的会话时生成一个新的密钥。 (请确保在提出此请求时使用HTTPS)。如果会话过期,用户必须再次输入用户名/密码,并使用新令牌加密。要解密密钥,您必须向服务器发送(安全)请求(传入会话ID)以请求密钥,然后可以使用该密钥来解密用户名和密码。

现在,这仍然留下了常见的漏洞,例如交叉端脚本或会话劫持,但至少用户密码不会以明文形式存储在客户端。

您认为如何?


8

对于任何磕磕绊绊就这个问题,斯坦福大学在http://crypto.stanford.edu/sjcl/有一个加密项目上。我自己并没有在制作中使用它,但我正在忙着研究它,到目前为止它看起来很有前途。希望这可以帮助某人。

0

我不得不说,如果你创建一个会话数据1不是, - 存储在服务器而不是客户端,因此没有人看到会话数据或至少它应该通过asp或php等方式完成所以应用程序需要互联网,并从Web服务器检索信息,而不是将其存储在客户端。 2如果这样处理客户端就像处理流式传输视频或图像一样,或者您必须在客户端创建一些文件,将密钥存储在客户端移动设备上是唯一的方法。因此,要么使用短ttl解密数据的密钥,通过某种形式的身份验证或证书给出的密钥,或者从主办公室安装的密钥,并在设备松动时加密设备。我没有找到并加密我喜欢为你建议的功能。

0

我工作在application面临同样的问题。 安全性对于此应用程序非常重要,因为它允许用户构建个人树(或嵌套列表)并将其存储在云中。

我的解决方案是使用由服务器为每个用户生成的另一个密码来加密存储在客户端的密码。

0

存储敏感的用户凭据真的不是一个好设计。相反,使用sprint框架从服务器生成一个经过身份验证的令牌。然后可以使用Web数据库安全模块将其存储在本地存储中。