我正在构建一个使用密钥与REST API通信的应用程序(通过https)。 我不希望用户/黑客发现该密钥并构建自己的应用程序,可以向服务器发送错误数据。 在应用程序中保护“字符串”的最佳选择是什么?
以下是我想到的选项:
1)在应用程序内部对字符串进行硬编码并对程序集进行模糊处理。 我认为仍有一些反混淆方法可以解密这个。
2)在app.config中传递它,并使用内置的.NET机制加密安装。 据我了解,解密密钥存储在窗口内的某个位置,对用户不可见。有人必须具备良好的系统知识和黑客技能来检索这个,是吗? 如果是,那么当用户下载安装包时,他仍然可以解压缩并查看密钥,对吗?
我还有其他选择吗?
我知道在客户端计算机上无法保护任何内容 - 没有100%的安全方法。
鲍尔泰克
答案 0 :(得分:2)
您有一个攻击者无法触及的秘密:用户的密码。你能做的最好的就是
以下是模仿浏览器如何对用户进行身份验证的方法。 OAuth2客户端Web应用程序流是另一个示例。
nonce
的随机数并保存。nonce
。这将是他自己的REST 密码 现在,当您的用户点击您的富客户端中需要进行REST调用的某个地方时
nonce
过了一段时间就会过期。nonce本身应该很难猜测,GUID不会这样做。 GUID的SHA-1(或更好)是好的。
这是一个很麻烦的事吗?没错,但这是你唯一的希望。机会是您的服务器体系结构,客户端库已经支持您可以重用的一些身份验证方案,如HTTP BASIC身份验证。答案 1 :(得分:1)
不要将密码存储在客户端上。存储它并在服务器上使用它。
如果您将秘密发送给客户,请确保: - 在传输期间以及存储在磁盘或内存中时对其进行加密 - 给它一个(短暂的)生命周期,所以当它被解密或被发现时它将不再有效。
你是对的:如果有人是系统管理员,你就不能相信系统保持安全。
如果用户不是管理员,则可以使用证书存储区或文件系统的其他特殊部分,只有系统和管理员才能访问。
答案 2 :(得分:1)
单个秘密密钥的问题是一旦密集出来,那么你就不能真正信任任何数据。
来自设备的任何形式的凭据都可能被黑客入侵。
所以至少我会从每个设备获得唯一的凭据 这样,如果您怀疑数据不正确,可以关闭这些凭据并查看与这些凭据关联的任何数据。
凭证可以是用户/密码,证书,甚至是秘密密钥 您可以设置应用程序来申请证书吗?