我们的架构是一个简单的 N 层模型,它由一个位于 IIS7 中的 ASP.Net 应用程序(托管在 DiscountASP 中)组成,它公开了 WCF 服务上的方法。这些方法使用 EF4 与数据库通信。客户端使用 Silverlight 4.0。
三个重点:
身份验证和授权不是问题 - 对服务的调用是匿名的,我们不关心调用者的身份。
在方法调用中传输的数据不敏感。
我们只是想确保任何人都无法拨打电话。
如果有错误请纠正我:
消息安全不是一个选项,因为 Silverlight 不支持它。
传输安全(HTTPS 和 x.509/SSL 证书)也无法在 Silverlight 中完成
因此,我们为实施某种程度的安全性而采取的步骤是:
密钥被硬编码到 XAP 中的一个 dll 中。
这个 dll 是加扰的,所以它不能被重新设计。
密钥作为参数发送给所有服务方法调用。
在每个方法开始时,将密钥与数据库中的原始密钥进行核对。
从服务中删除 MetaDataExchange 终结点。
考虑到这个最小的设置和许多缺陷,最大的缺陷可能是传输不安全(HTTP),并且密钥被暴露。所以问题是:
如果恶意用户想要破坏我们的系统,他需要付出多少努力才能提取密钥,找到暴露的方法并开始调用它们?
是否有其他 WCFcombiantion 可以在每次调用时提供基本的凭据保护(无 HTTPS 或证书)?