我们的架构是一个简单的N层模型,它由位于IIS7中的ASP.Net应用程序(托管在DiscountASP中)组成,它公开了WCF服务上的方法。这些方法使用EF4与DB通信。客户端使用Silverlight 4.0。
三个要点:
身份验证和Authurazation不是一个问题 - 调用 服务是匿名,我们不关心的身份 呼叫者。
方法中传输的数据调用不敏感。
我们只是想确保任何人都无法拨打电话。
如果出错,请纠正我:
消息安全性不是一种选择,因为Silverlight不支持它
传输安全性(HTTPS和x.509 / SSL证书)也无法在Silverlight中完成
因此,我们采取的强制执行某些安全级别的步骤是:
密钥被硬编码到XAP中的dll中。
此dll已被扰乱,因此无法重新设计。
将密钥作为参数发送到所有服务方法 调用。
在每个方法的开头,检查密钥 原来坐在DB。
从服务中删除MetaDataExchange端点。
考虑到这种最小化设置并且存在许多缺陷,最大的缺陷可能是传输不安全(HTTP),并且秘密密钥暴露出来。所以问题是:
如果恶意用户想要损害我们的系统,他需要花费多少精力来提取密钥,找到暴露的方法并开始调用它们?
是否有其他WCF组合可以在每次调用时提供凭据的基本保护(无HTTPS或证书)?
答案 0 :(得分:0)
嗯,你的previous question合同中的安全意味着什么更清楚。安全性由several aspects组成。
身份验证和Authurazation不是一个问题 - 调用 服务是匿名的,我们不关心的身份 呼叫者。
我们只是想确保任何人都无法拨打电话。
这是一个矛盾。如果您想确保您正在寻找身份验证的所有人都无法进行呼叫。
- 方法中传输的数据调用不敏感。
考虑到这种最小的设置并且存在许多缺陷,最大的缺陷可能是传输不安全(HTTP),并且秘密密钥暴露出来。
另一个矛盾 - 你显然想发送敏感数据。
消息安全性不是Silverlight的选项 - 如果我们讨论的是邮件加密和签名,则确实如此,但如果您使用HTTPS提供安全通道,您仍然可以在邮件中传递用户名和密码= TransportWithMessageCredential
找到密钥需要多少努力?
如果您想保护传输并构建安全解决方案,则必须使用HTTPS。 Silverlight可以使用通过HTTPS公开的服务。您还可以使用用户名和密码来识别您的客户。客户将负责保密用户名和密码,因为如果他们不这样做,您将看到谁的帐户损害了您的申请。