【问题标题】:Best way for storing a static password on an automated client在自动化客户端上存储静态密码的最佳方式
【发布时间】:2009-12-14 16:01:47
【问题描述】:

我正在构建一个由许多连接到服务器的客户端组成的系统。客户端通过 Web 服务调用自动将数据推送到服务器。 我已经建立了一种身份验证机制,以便客户端通过服务器进行身份验证,因此只有经过身份验证的客户端才能上传数据。 问题是我已经将密码硬编码到客户端代码中,如果有人使用反射器,它是可以访问的。 在这种情况下,我没有用户输入,在客户端存储静态密码的最佳方式是什么? 谢谢 (客户端.net版本为2.0,服务端.net版本为3.5)

【问题讨论】:

    标签: c# client passwords client-server hardcoded


    【解决方案1】:

    您可以使用多种方法,但最容易实现的方法之一是加密密码,然后将其存储在 app.config 中,以便部署给用户的应用程序。

    【讨论】:

    • 仍然可以通过反射看到解密机制,不是吗?
    【解决方案2】:

    你看过http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx吗?

    另外,您的网络服务是 WCF 吗?如果是这样,您可以使用相互证书安全性。它比密码更可靠。

    HTH

    【讨论】:

      【解决方案3】:

      “我已经建立了一种身份验证机制,以便客户端与服务器进行身份验证,因此只有经过身份验证的客户端才能上传数据。”

      他们如何通过身份验证成为“经过身份验证的客户”?

      有人可以将您的应用程序复制到他们的家庭计算机上,现在他们是经过身份验证的客户端吗?

      如果您试图根据程序集中的值来决定谁可以上传,这似乎是一个巨大的安全疏忽。

      如果您可以进行基于 IP 的验证,如果您想避免密码和登录机制。

      【讨论】:

      • 这是一个大问题 - 任何人都可以将我的应用程序复制到他们的家庭计算机并成为经过身份验证的客户端。现在,我正在使用硬件 ID 来避免这种情况。但它仍然不够安全。
      【解决方案4】:

      一方面,我会考虑为您的代码获取一个好的混淆器。这将阻止(或至少阻止)人们在您的程序集上使用反射器。

      但是,您的身份验证系统听起来不太安全。 即使您确实对密码进行了加密,如果密码始终相同,那么就可以像嗅探数据包一样简单地找出需要发送到您的服务器以进行身份​​验证的内容。因为它必须在发送之前进行解密。

      您至少必须通过 SSL。

      如果您在某些公共客户端的环境中安装它,您可能还想考虑使用机器哈希的签名 XML 进行异步加密。类似于许可计划。

      我对您的架构或您运行的环境一无所知,因此我无法就最佳安全实施提出任何建议,但我可以告诉您当前的设置不对我来说听起来很安全。

      【讨论】:

      • 谢谢,我会介绍 SSL ,已经在使用机器哈希,我会研究许可方案。
      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      相关资源
      最近更新 更多