【问题标题】:What kind of security threat i could face using web services?使用 Web 服务可能会面临什么样的安全威胁?
【发布时间】:2010-09-01 15:33:48
【问题描述】:

关于我的这个question,我得到了以下答案以将其添加到网络配置文件中。它也解决了我面临的问题。但现在我的问题是,是否存在任何形式的安全威胁?如果是,可能有多严重?这可能是什么威胁?你在这里有什么建议吗?

<configuration>
    <system.web>
    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
    </system.web>
</configuration>

【问题讨论】:

  • 网络服务曾经威胁过我的狗..

标签: c# asp.net ajax web-services json


【解决方案1】:

HttpGet 和 HttpPost 默认禁用的原因是它们很容易被用于 XSS 攻击。来自http://msdn.microsoft.com/en-us/library/ff648667.aspx

通过禁用不必要的协议,包括 HttpPost 和 HttpGet,您可以减少攻击面。例如,外部攻击者可能会在电子邮件中嵌入恶意链接,以使用最终用户的安全上下文执行内部 Web 服务。禁用 HttpGet 协议是一种有效的对策。在许多方面,这类似于 XSS 攻击。这种攻击的一种变体使用可公开访问的网页上的标签来嵌入对 Intranet Web 服务的 GET 调用。这两种攻击都可以允许外部人员调用内部 Web 服务。禁用协议可以降低风险。

有关 XS 攻击的更多信息,请参阅http://en.wikipedia.org/wiki/Cross-site_scripting

我通常避免使用 HttpGet 并且可以使用 HttpPost。如果它是以任何方式管理资金的网络服务,我会不惜一切代价避免它。尽可能使用 SOAP Web 服务。

【讨论】:

    【解决方案2】:

    一般来说,当您实现一个基本的 SOAP Web 服务时,您就是在向世界公开该服务,无论好坏。您在代码中必须考虑的主要问题是验证输入。特别是天真地接受字符串可能是非常有害的。如果有任何值,则可能是您无法处理的数字,请查找它并且不要继续。如果您接受字符串,请确保彻底清理它们(寻找并非常怀疑分号,并转义您看到的每个“特殊字符”)。

    对在 SQL 查询中使用未经处理的字符串的幼稚服务的常见攻击可能类似于“ABC”;drop database master;”。如果您的代码将其注入到 SQL 查询中而没有注意到人工查询终止和恶意脚本,那么您可能会在第二天清理您的办公桌。解决方法很简单;转义单引号,将分号替换为 ASCII 或 Unicode 表示,您可以从中翻译回来(或简单地将其删除),服务调用会将其视为垃圾。

    这就引出了第二点;您的 Web 服务,即使它们是您的代码,也应该成为系统其余部分的高度怀疑对象。 Web 服务应该使用提供尽可能少的权限来完成其工作的 DB 身份验证。如果您的服务使用管理员或 DBO 登录,那么您几乎肯定是错的;上面的查询,如果通过的话,实际上会被执行,并且你的主数据库已经消失,导致你的数据库服务器无法运行。如果您的服务使用的登录名非常严格地控制了服务所需的权限,那么 SQL Server 会失败,但这比失去您的主数据库要好得多。

    另外,要非常小心异常处理。格式不正确的异常(将通过 SOAP 返回很像有效结果)可能包含机密信息,从而鼓励攻击者试图让您的服务抛出一个异常,该异常包含有关服务背后实现的有用信息。 SQL/ADO 异常对攻击者特别有帮助,因为它们提供了有关您的数据结构的信息,这些信息可能会被利用来造成麻烦。寻找可能引发超出您控制范围的异常的事情,并在 CLR 或其他比您的代码更深的层出错之前优雅地处理这种情况。在其他地方捕获所有异常通常是不好的做法,但是在这里进行一些清理的“捕获和释放”可能是一个好主意,并且非常通用的 500 错误重定向,通常表示异常捕获,是 websphere 中的常见做法。如果您想或必须在代码中抛出异常,请谨慎设计,不要包含任何您不想让世界知道的信息。

    从架构的角度来看,将您的服务想象成墙上的电源插座。插头是从墙上获得所需(电源)的唯一方法。您知道有 J-box、导管、开关等,但如果没有大量(字面)黑客攻击,您将无法访问它们。按照这个类比,您的端点应该设置为侦听指定的已知端口,并且系统的其余部分从外面看起来应该像一堵墙;所有其他端口都应该关闭。

    【讨论】:

      【解决方案3】:

      我认为您应该迁移到基于 WCF 的 Web 服务。除了 WCF 对 asmx 的所有其他好处之外,WCF 4 还具有基于 HTTP 接受标头或在不存在时与请求消息格式相同的自动响应格式选择(json 或 xml)。

      一般来说,如果您有面向公众的 Web 服务,那么您应该担心 DOS 攻击。在最坏的情况下,它会使您的服务崩溃,在最好的情况下,它会拒绝您的 WS 的合法调用者。格式错误的 SOAP 消息,XML bombs 可用于 DOS 攻击。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-30
        • 2012-06-19
        相关资源
        最近更新 更多