【问题标题】:Web Services: Secure? Asp.net网络服务:安全吗? ASP.NET
【发布时间】:2010-07-29 14:15:04
【问题描述】:

我无法理解的是 Web 服务的安全性。

例如,我们正在编写一个桌面应用程序,它将与我们其中一个网站上的数据以及本地数据进行交互。虽然这些数据很敏感,但我们最不想要的是任何人调用 Web 服务。

我还没有发现任何说 Web 服务具有某种身份验证方法的内容,而且我看到人们谈论的唯一安全性是使用证书来加密消息。

我不是这方面的专家,我会感谢任何人的意见,也许还有一个链接可以简单地解释这一点。

谢谢 雅克

【问题讨论】:

    标签: asp.net security web-services


    【解决方案1】:

    如果您使用 ASP.NET 创建响应/请求服务,您只有 3 个选项

    • ASMX
    • WCF
    • 用于处理请求的普通 .NET 页面(或处理程序)

    当您指定服务时,您可以在 ASMX 和 WCF 之间进行选择(您可以在我的回答 here 中阅读 ASMX 和 WCF 之间的区别)

    记住这个

    ASMX 被视为已弃用的技术并被 WCF 取代。因此,如果您要开始需要公开可重用服务的新开发,WCF 是您的最佳选择。

    如今,当我们需要保护服务时,有一种常见的模式,那就是使用会话密钥。

    服务通常有一个登录方法,它获取一个用户和某种密码(通常是散列、加盐等),并返回一个有时间限制的“票”(滑动或不滑动 - 意味着每个调用一个方法,期间是否重置),并且所有调用都需要将该票包含在消息正文中。

    Magento 等服务 API 使用它。

    或者拥有一个预生成的密钥,该密钥会提供给用户/应用程序以用于每次调用

    Campaign MonitorMailChimp 等服务 API 和其他人使用它。

    另一种正常的方法是在消息标题中始终包含用户和其他凭据。

    SuperOffice CRM 等服务 API 使用它。

    这些服务都不使用 SSL,因为我只会在我真的需要保护“线路”中的数据时使用 SSL,记住 SSL 会延长每次调用的响应时间。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      身份验证: 考虑使用 SSL 保护您的 Web 服务。将客户端证书分发给需要使用这些 Web 服务的人。将 IIS 配置为“需要客户端证书”。

      授权:考虑开发一种方案,让用户在查询字符串中发送某种用户名和密码。当您可以确定允许这些凭据执行他们请求的操作时,您可以允许他们继续。实际上,这是应用程序开发人员需要编写的自定义逻辑。 ASP.NET Web 服务中没有对此的内置约定。

      The SSL encryption occurs at a lower level from the application。然后由应用程序来确定允许谁执行哪些操作。

      【讨论】:

        【解决方案3】:

        我们的网络服务通过 SSL(证书部分)加密,即https://www.yousite.com 而不是http://www.yoursite.com。这只是为数据流提供基本加密。见SSL.

        它们还通过为我们的网站选择的身份验证方法进行身份验证。如果是windows auth,或者forms auth。请参阅msdn page 了解 ASP .NET 身份验证。

        【讨论】:

        • 好的,所以我得到了关于 SSL 的第一部分,但是你是说这里也可以使用普通的 Asp.net 表单身份验证吗?所以本质上,没有 SSL 的 Web 服务可以像没有 SSL 的网页一样使用相同的表单身份验证机制进行身份验证?
        • @Jacques,这样想,网络服务本质上是您网站上的一个页面。如果您的网站需要登录,那么如果该页面需要登录,则 Web 服务将无法工作
        • 但表单身份验证需要一个 cookie,该 cookie 与身份验证票证一起来回传递。据我所知,Web 服务不会那样做吗?那么在 Web 服务的情况下如何实现表单身份验证呢?
        • @Jacques 实际上现在我认为它是唯一一个你不能做的,但这里msdn.microsoft.com/en-us/library/…msdn 关于webservices auth 的文章
        • 所以对我来说有趣的问题是:当您进行 Ajax 调用以填充级联列表时,它在 Asp.net 页面上的情况如何,它仍然以某种方式通过了身份验证?
        【解决方案4】:

        对于 XML Web 服务,您应该考虑以下最佳实践

        • 保护传输层:XML 中的信息或数据在传输过程中不能被中断和读取。
        • 屏蔽内部资源:使用网络地址转换 (NAT)。
        • 实施 XML 过滤:借助 XML 和 SOAP 的帮助,可以将情感过滤策略设置为需要完全解析或处理的 XML 文档的内容级别。
        • 验证、转换、签名和时间戳消息:使用 XML 模式验证,使用 XSLT 转换 XML,唱出所有消息,使用网络时间协议 (NTP) 将所有 XML 节点同步到单个权威参考时间来源。
        • 加密消息字段
        • 实施安全审核
        • 使用现有的安全方法,例如 HTTPS
        • 在服务器上执行 XSL 转换

        来源:EC-Council Secure Programmer。

        【讨论】:

        • 请告诉我如何屏蔽内部资源?加密消息字段是什么意思?
        【解决方案5】:

        解释以前的答案:Web 服务与您创建的一样安全。一般来说,有两种类型的安全性。保护传输,并保护访问。使用 SSL 可以使您的传输安全()。使用身份验证(要求用户名和密码)可以确保访问安全。

        通过公共互联网访问的 Web 服务(即:不是 VPN 或仅内部资源)确实不如 Windows 应用程序安全,因为任何人都可以访问它们,并有可能试图破坏您的安全性。通过同时使用传输和访问安全,您可以将其降低到可接受的水平(可以接受到银行将它们用于金融交易的程度,并且在您与必须面对 FDIC 检查的银行家交谈之前,您不会偏执)。

        【讨论】:

          【解决方案6】:

          所有 Web 应用程序都暴露给攻击者,并且是攻击的一个很好的表面区域。 Web 服务(例如 SOAP(WCF))的最大问题是程序员通常没有意识到攻击者获得对服务的完全访问权限是微不足道的。程序员经常会像 execute_sql_query() 这样暴露令人讨厌的功能。

          你应该阅读整个OWASP top 10

          【讨论】:

            【解决方案7】:

            【讨论】:

            • 请注意,“ASP.NET Web 服务”是一项遗留技术,不应用于新开发。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-19
            • 1970-01-01
            • 1970-01-01
            • 2021-12-29
            相关资源
            最近更新 更多