2011-04-27 31 views
3

我们正在准备部署一个Windows .NET客户端应用程序,该应用程序将使Web服务调用回到我们的中央服务器。我们已要求验证所有对Web服务的调用来自我们的客户端应用程序,而不是来自任何其他调用者。有人建议我们传递一个安全令牌,它对我们应用程序的所有安装都是通用的。不过,我们现在有了这个通用字符串来保护应用程序安装。有没有一种有效的方法来合理保护这样的字符串不被黑客发现?如何在windows .net应用程序中保护静态字符串?

感谢您的任何建议。

+4

在代码中混淆字符串可能会让其他人更难发现它,但不是100%安全。你有更大的问题是有人可以安装一个嗅探器程序并查看HTTP请求。 – 2011-04-27 23:17:12

+0

谢谢,我应该提到我们将使用SSL进行传输。 – 2011-04-28 16:48:30

回答

1
  • 使用SecureString应对随时令牌。这样从内存中检索令牌将会困难得多。
  • 将令牌作为连接字符串存储在app.config中,并对'connectionStrings'部分进行加密。通过这种方式,除了用户的账户(通过DPAPI),令牌将被保护。
  • 使用SslStream来进行客户服务通信。这样,你的连接将被加密。再加上令牌,您的通信现在将通过身份验证(即您了解您的客户)并获得保护。
+0

谢谢Teoman。这一切听起来不错。我在一个关键点上很模糊,我会去研究,但也许你可能会善于清理。我们是否可以将app.config中已加密的字符串部署到某台机器(在某些陌生的域中)并仍然使用DPAPI来限制对该字符串的访问? – 2011-04-28 17:11:46

+0

DPAPI生成用户特定的密钥进行加密,因此加密的app.config可能无法在另一台计算机上解密(尽管我对此不完全确定,但可能还有一种方法将加密密钥与配置文件一起复制,到另一台机器)。 – 2011-04-29 00:32:24

0

它被称为公钥加密。

  • 您的应用程序公用密钥发送给服务器
  • 服务器还给必须添加一些前缀
  • 您的应用程序会询问他的公钥
  • 你的应用程序解密字符串的服务器加密的字符串,加上前缀
  • 与服务器的公钥
  • 加密发送的关键服务器
  • 服务器验证

如果黑客知道你的二进制文件中的前缀,它不会知道服务器提供的后缀,也不能解密你发送回服务器的内容,因为黑客没有私人服务器键。漏洞是黑客可以提取应用程序中的私钥来解密后缀。但是如果需要,服务器可以每隔几秒更改一次,或者它可以是时间依赖的。但是,时间依赖性可以被利用,如果你选择这个,最好有一个可变的时间依赖后缀改变。在某个时刻,如果需要付出很大的努力和一台超级计算机,黑客也可以通过搜索一个可以解密所有返回的字符串的密钥,这就是为什么您不应该在其上生成随机后缀服务器,但回收其中几个。

如果您认为工作太多,可以使用SecureString和加密的连接字符串。但是这肯定是可以随时随地处理的,因为所有需要的都是在客户端,并且黑客不需要x * 2暴力解密离子。

+0

谢谢,我很欣赏这个解释,听起来像一个更复杂的方法,但我没有关注它是如何解决在客户端代码中的字符串(在这种情况下是私钥)的脆弱性,我们需要保持安全。也许你对SecureString +加密连接字符串的建议(Teoman也建议)可能是事情的症结所在? – 2011-04-28 17:02:57

相关问题