我有一个场景,用户通过ASMX Web服务将事务日志上传到主服务器。该应用程序是clickonce.Net winforms应用程序
目前我正在做这件事,将对象列表转换为Json,并在服务上反序列化它。通过SSL。
string data = JsonConvert.SerializeObject(Values_Static.logitems);
我的代码受SmartAssembly保护。尽管如此,我还是遇到了一些漏洞,攻击者可以访问网络连接,并可以对数据进行解密。
现在我想到了一个场景,我用一些私有字符串密钥加密Json字符串,然后在服务器上对其进行解密。
例如
private string salt = "$e7?8f@l4";
return ByteArrToString(Encrypt(TextValue + salt));
在应用程序中对密钥进行硬编码,并在服务器中对其进行解码。
它行得通吗?用户每分钟都会将日志上传到服务器,每次上传可能有20-30个条目。有没有数据被破坏或黑客入侵的可能性?
更新:根据以下讨论。我知道我的代码有一些问题。代码正在接受无效证书。如何防止仅接受来自https://Web服务的有效证书。ATM,每个人都可以通过加密HTTPS上的fiddler看到代码。
我的IIS 7上安装了有效的证书。并且工作正常问题出在代码上。以及在Visual Studio中自动生成的标准web引用。
更新2:最终的结果是,Post数据不是加密的,它是纯XML的,任何可以嗅探的软件都可以读取,但是GET数据是安全的。我有点犹豫,找不到有效的答案
您使用SSL吗?如果是,则任何应用程序级别的加密都是多余的。而且,密钥必须嵌入代码中,因此任何攻击者都可以读取。
Fiddler(或其他HTTPS代理)可以解密任何HTTPS流量。
您可以通过在客户端代码中要求特定的服务器证书(而不是信任系统本身信任的任何证书)来防止Fiddler的简单使用。然而,这只是一个微弱的威慑,因为用户可以反编译你的代码并对其进行更改,这样你的新证书检查就会被取消。
这被称为"不受信任的客户端"问题,正是这一问题使数字版权管理(DRM)软件成为"尽最大努力"的事务,而不是铁一般的保护。