代码之家  ›  专栏  ›  技术社区  ›  Mathieu

WinForms客户端和共享主机Web服务器之间的WCF安全性

  •  3
  • Mathieu  · 技术社区  · 15 年前

    好 啊,

    我开发了这个WinForms客户机,它通过WCF调用与服务器(ASPX应用程序)交互。我现在想将服务器部署到我的共享webhost上,但我对WCF还是有点陌生,尤其是它背后的安全可能性。

    我不需要基于用户的身份验证,因此不需要来自客户机用户的身份验证。 但是我只希望这个WinForms客户机的实例能够与服务交互。 服务器和客户机之间传递的信息不是很敏感,因此实际上不需要对其进行保护,但如果可以轻松地做到这一点,这将是一个优势。

    对于共享主机(IIS)环境(没有HTTPS可供使用),这可能吗?我应该使用什么绑定和选项?我想应该是wsHttpBinding,但是如何设置安全选项呢?

    使用.NET 4.0

    谢谢

    2 回复  |  直到 15 年前
        1
  •  3
  •   marc_s    15 年前

    要保护您的邮件,您在WCF中有两个选项—邮件或传输安全性。在internet上,由于客户端和服务之间的跳数未知,传输安全性不起作用—剩下的是消息安全性(在消息通过“网络”时对其进行加密)。为此,通常向服务(仅服务器端)添加一个数字证书,客户端可以发现并使用该证书加密消息。只有你的服务才能解密它们-所以你在那端是安全的。

    下一点是:谁能打电话给你的服务?如果你想对任何人都完全开放,那么是的,你需要 wsHttpBinding (或RESTful变体)- webHttpBinding ). 如果您希望允许非.NET客户端,则通常仅限于无身份验证(任何人都可以调用)或用户名/密码方案,您将在服务器端根据有效用户数据库验证这些方案。

    • 在您的服务上禁用元数据;有了这个,你可能会“隐藏”你的端点和它们提供的服务-使用“元数据扫描程序”(如果存在)的人将无法偶然发现你的服务并找出它提供了什么方法等。然而,这也使得组织外的其他开发人员无法向你的服务添加服务引用。

    • 您可以定义并使用自定义二进制http绑定—只有使用此设置的其他客户端甚至可以调用您的服务。二进制http绑定也会带来一些速度改进。看到这个了吗 blog post 如何做到这一点。

    • blog post here 如何为WCF实现这样一个消息检查器扩展。

    • 最终的步骤是将数字证书与服务一起安装到客户机上。然后,您将设置客户端代理以使用该证书对服务进行身份验证。只有拥有该证书的客户机才能调用您的服务。

    这真的取决于你想走多远-WCF给了你很多选择,但你需要决定你要投入多少努力。

        2
  •  2
  •   marc_s    15 年前

    你完全不能控制客户,你永远也不会有这种能力。

    HTTPS是美丽的,这是一个该死的耻辱,你被迫脆弱的 OWASP A9: Insufficient Transport Layer Protection . 如果由我决定,我会搬到另一个关心安全的地方。如果你在网络上抛出用户名和密码,那么你的行为会给你的用户带来危险。

    我在WCF服务中看到的最大问题之一是,它们有一个暴露的“executeQuery()”函数。允许客户机生成由服务器执行的查询的开发人员。这种方法从根本上讲是有缺陷的,因为您只是将数据库交给了攻击者。这种类型的漏洞不是SQL注入,它属于 CWE-602: Client-Side Enforcement of Server-Side Security .

    OWASP A4: Insecure Direct Object References . 攻击者是否可以通过提供不同的用户id来欺骗您的WCF服务,使其认为是另一个用户?你相信客户会说实话吗?

    您必须考虑的下一个漏洞分类是 OWASP A1: Injection CreateProcess() 正在调用 cmd.exe CreateProcess() 是一个“水槽”。有 许多的 这些方面的漏洞类型,包括但不限于:;SQL注入、LDAP注入、XPATH注入。这些类型的漏洞影响 全部的