我正在构建一个由许多连接到服务器的客户端组成的系统。客户端通过 Web 服务调用自动将数据推送到服务器。我建立了一种身份验证机制,以便客户端通过服务器进行身份验证,因此只有经过身份验证的客户端才能上传数据。问题是我已经将密码硬编码到客户端代码中,如果有人使用反射器,它是可以访问的。在这种情况下,我没有用户输入,在客户端上存储静态密码的最佳方式是什么?谢谢(客户端上的.net版本是2.0,服务器上的.net版本是3.5)
4 回答
您可以使用多种方法,但最容易实现的方法之一是加密密码,然后将其存储在 app.config 中,以便部署给用户的应用程序。
你看过http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx吗?
另外,您的网络服务是 WCF 吗?如果是这样,您可以使用相互证书安全性。它比密码更强大。
高温高压
“我建立了一种身份验证机制,以便客户端通过服务器进行身份验证,因此只有经过身份验证的客户端才能上传数据。”
他们如何通过身份验证成为“经过身份验证的客户”?
有人可以将您的应用程序复制到他们的家庭计算机上,现在他们是经过身份验证的客户端吗?
如果您试图根据程序集中的值来决定谁可以上传,这似乎是一个巨大的安全疏忽。
如果您可以进行基于 IP 的验证,如果您想避免密码和登录机制。
一方面,我会考虑为您的代码获得一个好的混淆器。这将阻止(或至少阻止)人们在您的组件上使用反射器。
但是,您的身份验证系统听起来不太安全。即使您确实加密了密码,如果密码始终相同,那么就像嗅探数据包一样容易找出需要发送到您的服务器以进行身份验证的内容。因为它必须在发送之前被解密。
您至少必须通过 SSL。
此外,如果您在某些公共客户端的环境中安装它,您可能还想研究使用机器哈希使用带有签名 XML 的异步加密。类似于许可计划的东西。
我对您的架构或您正在运行的环境一无所知,因此我无法就最佳安全实施提出任何建议,但我可以告诉您当前的设置听起来不安全我。