如何获得用户';s密码从HTML表单转换到服务器端SecureString,而内存中没有字符串
本文关键字:SecureString 服务器端 内存 字符串 转换 表单 用户 何获得 HTML 密码 | 更新日期: 2023-09-27 18:22:11
我有一种理论情况,我想使用SecureString来存储web表单用户提供的密码,供服务器稍后使用,以完成需要向不同web服务提供明文密码的任务。
我知道,当它被使用时,它几乎肯定是明文的——除非我能找到一种方法,至少通过SSL将它保护到web服务,但我更喜欢从用户提交它的那一刻起,直到它被提供给端点web服务,一直保持模糊/加密。
因此,我认为以下是正确的:
- 获取密码的连接是通过SSL
- 标准的web表单会通过字符串将数据提供给我的服务器端代码
- SecureString可以(必须?)用一系列字节初始化
- SecureString将以加密文本的形式存储(由同一计算机上的同一帐户加密/解密)
除非我猜错了,否则在收到表单数据和处理代码之间,密码将以明文形式存在于服务器内存中。如果是这样的话,而且不是太复杂,我想避免这种情况。我想在提交到服务器之前,在浏览器端加密密码,使用服务器生成的公钥,并在页面中提供给JavaScript使用。然后使用私钥对其进行解密,并逐字节传递给SecureString。
我发现的每一个关于JavaScript加密的问题和文章都是在将其用作SSL的替代品的背景下提出的,或者谈论在浏览器中生成密钥,以期防止中间人攻击。我会使用SSL,生成密钥服务器端,当然也必须信任用户的浏览器(还有其他方法吗?)。显然,没有什么是完美的,记忆中存在的字符串也不算太糟,但我更愿意尽可能地限制表面积。我发现了一些声称使用RSA的JavaScript库,但对它们的质量或可用性几乎没有什么评论。
最好的方法是什么?我认为这可能有些过头了,但这是完全过头了——还是只是一点点?有没有更简单的方法?
如果简单地缓存密码并将其作为字节数组而不是字符串进行处理,我可能会感到满意——所以这是一个可以接受的替代方案。我应该简单地将密码拆分为多个字段,然后通过SecureString将它们"粘合"在一起吗?
我认为更重要的是ssl、tls或任何用于保护通道的最新版本,以及如何处理身份验证和密码存储。对于黑客来说,可能有比服务器内存更有利可图的切入点,你想在担心之前先计算出来。
Https应该已经在比你通常访问的级别低得多的级别上加密浏览器和服务器之间的通信。我也不相信基于javascript的解决方案,因为它很容易在客户端上查看源代码和操作。这也许是可能的,但我对此持怀疑态度。
至于服务器端,如果你在玩自己的游戏,我会阅读单向哈希技术。