1

我们的架构是一个简单的 N 层模型,它由一个位于 IIS7 中的 ASP.Net 应用程序(托管在 DiscountASP 中)组成,它公开了 WCF 服务上的方法。这些方法使用 EF4 与数据库通信。客户端使用 Silverlight 4.0。

三个重点:

  • 身份验证和授权不是问题 - 对服务的调用是匿名的,我们不关心调用者的身份。

  • 在方法调用中传输的数据不敏感

  • 我们只是想确保任何人都无法拨打电话。

如果有错误请纠正我:
消息安全不是一个选项,因为 Silverlight 不支持它。
传输安全(HTTPS 和 x.509/SSL 证书)也无法在 Silverlight 中完成

因此,我们为实施某种程度的安全性而采取的步骤是:

  • 密钥被硬编码到 XAP 中的一个 dll 中。

  • 这个 dll 是加扰的,所以它不能被重新设计。

  • 密钥作为参数发送给所有服务方法调用。

  • 在每个方法开始时,将密钥与数据库中的原始密钥进行核对。

  • 从服务中删除 MetaDataExchange 终结点。

考虑到这个最小的设置和许多缺陷,最大的缺陷可能是传输不安全(HTTP),并且密钥被暴露。所以问题是:

如果恶意用户想要破坏我们的系统,他需要付出多少努力才能提取密钥,找到暴露的方法并开始调用它们?

是否有其他 WCFcombiantion 可以在每次调用时提供基本的凭据保护(无 HTTPS 或证书)?

4

1 回答 1

0

好吧,不,对于您之前的问题,合同中的安全性意味着什么变得更加清楚。安全性包括几个方面

  • 身份验证和授权不是问题 - 对服务的调用是匿名的,我们不关心调用者的身份。

  • 我们只是想确保任何人都无法拨打电话。

这是一个矛盾。如果您想确保您正在寻找身份验证的每个人都无法拨打电话。

  • 在方法调用中传输的数据不敏感。

考虑到这个最小的设置和许多缺陷,最大的缺陷可能是传输不安全(HTTP),并且密钥被暴露。

另一个矛盾 - 你显然想发送敏感数据。

消息安全不是 Silverlight 的一个选项 - 如果我们谈论消息加密和签名,这是真的,但如果您使用 HTTPS 提供安全通道,您仍然可以在消息中传递用户名和密码 =TransportWithMessageCredential

需要多少努力才能找到密钥?

  • 如果您不使用 HTTPS,它会发现每个人都有基本技能并可以访问网络流量
  • 如果您将密钥放在汇编中,它可能需要更多技能,但密钥仍然存在(混淆使得难以对逻辑进行逆向工程,但常量必须仍然相同)。

如果您想保护您的传输并构建安全的解决方案,您必须使用 HTTPS。Silverlight 可以使用通过 HTTPS 公开的服务。您还可以使用用户名和密码来识别您的客户。客户将负责保密用户名和密码,因为如果他们不这样做,您将看到谁的帐户损害了您的应用程序。

于 2011-08-15T13:41:28.177 回答