阻止用户(黑客)查看嵌入在.NET桌面应用程序中的字符串

时间:2013-01-29 09:10:08

标签: .net security

我正在构建一个使用密钥与REST API通信的应用程序(通过https)。 我不希望用户/黑客发现该密钥并构建自己的应用程序,可以向服务器发送错误数据。 在应用程序中保护“字符串”的最佳选择是什么?

以下是我想到的选项:

1)在应用程序内部对字符串进行硬编码并对程序集进行模糊处理。 我认为仍有一些反混淆方法可以解密这个。

2)在app.config中传递它,并使用内置的.NET机制加密安装。 据我了解,解密密钥存储在窗口内的某个位置,对用户不可见。有人必须具备良好的系统知识和黑客技能来检索这个,是吗? 如果是,那么当用户下载安装包时,他仍然可以解压缩并查看密钥,对吗?

我还有其他选择吗?

我知道在客户端计算机上无法保护任何内容 - 没有100%的安全方法。

鲍尔泰克

3 个答案:

答案 0 :(得分:2)

您有一个攻击者无法触及的秘密:用户的密码。你能做的最好的就是

  • 使您的REST密钥难以重播(不使用它)
  • 使调用可以追踪到单个用户的会话

以下是模仿浏览器如何对用户进行身份验证的方法。 OAuth2客户端Web应用程序流是另一个示例。

  1. 询问用户密码
  2. 对用户进行身份验证,可能使用您要保护的相同REST API。根据定义,这不是经过身份验证的调用。考虑一个登录表单,它始终是公共的,在HTTPS连接上。
  3. 在服务器端,生成一个名为nonce的随机数并保存。
  4. 用户仍在等待登录,向他发送nonce。这将是他自己的REST 密码
  5. 现在,当您的用户点击您的富客户端中需要进行REST调用的某个地方时

    1. 在您的REST通话中添加用户名 - 随机数对
    2. 在服务器上,当有REST呼叫进入时,请检查用户名 - nonce是否有效
    3. 在您的API上调用某种注销,如果不使用,nonce过了一段时间就会过期。
    4. nonce本身应该很难猜测,GUID不会这样做。 GUID的SHA-1(或更好)是好的。

      这是一个很麻烦的事吗?没错,但这是你唯一的希望。机会是您的服务器体系结构,客户端库已经支持您可以重用的一些身份验证方案,如HTTP BASIC身份验证。

答案 1 :(得分:1)

不要将密码存储在客户端上。存储它并在服务器上使用它。

如果您将秘密发送给客户,请确保: - 在传输期间以及存储在磁盘或内存中时对其进行加密 - 给它一个(短暂的)生命周期,所以当它被解密或被发现时它将不再有效。

你是对的:如果有人是系统管理员,你就不能相信系统保持安全。

如果用户不是管理员,则可以使用证书存储区或文件系统的其他特殊部分,只有系统和管理员才能访问。

答案 2 :(得分:1)

单个秘密密钥的问题是一旦密集出来,那么你就不能真正信任任何数据。

来自设备的任何形式的凭据都可能被黑客入侵。

所以至少我会从每个设备获得唯一的凭据 这样,如果您怀疑数据不正确,可以关闭这些凭据并查看与这些凭据关联的任何数据。

凭证可以是用户/密码,证书,甚至是秘密密钥 您可以设置应用程序来申请证书吗?