转贴:关于安全的建议:对投入使用的 XML Web Services 禁用 HTTP-GET 和 HTTP-POST 协议 - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 转贴:关于安全的建议:对投入使用的 XML Web Services 禁用 HTTP-GET 和 HTTP-POST 协议 (http://www.webasp.net/article/5/4087.htm) | ||||||
| -- 作者:未知 -- 发布日期: 2003-07-12 | ||||||
| 关于安全的建议:对投入使用的 XML Web Services 禁用 HTTP-GET 和 HTTP-POST 协议 Microsoft Corporation 2002 年 2 月 摘要:出于安全原因,Web service 操作人员可能需要对 XML Web services 禁用 HTTP-GET 和 HTTP-POST 消息处理协议。禁用这些协议有助于防止外部 Web 站点与您的 Intranet 上的 XML Web services 进行恶意通信。 目录简介由于 HTTP-GET 和 HTTP-POST 消息处理协议的固有功能,在某些条件下,恶意 Web 页可以使用它所定义的参数调用在防火墙后面运行的 XML Web service。这与某些基于 HTTP-GET 的恶意重定向问题类似。如果 XML Web service 支持使用 HTTP-GET 或 HTTP-POST 消息处理协议(对于使用 ASP.NET 创建的 XML Web services,将默认启用这些协议)进行通信,就可能会发生此类安全问题。 尽管使用 HTTP-POST 创建恶意 Web 页并不容易,但如果 XML Web services 没有使用 HTTP-GET 和 HTTP-POST 消息处理协议,还是应该在提供用 ASP.NET 创建的 XML Web services 的生产用计算机上禁用对这两个协议的支持。 http://www.microsoft.com/china/msdn/library/dnnetsec/images/dishttpget01.gif 图 1:常见的恶意通信事件
只有在下列条件下才会发生图 1 所示的情况:
虽然这种情况概括的是如何使用 HTTP-GET 恶意调用 XML Web service,但同样适用于 HTTP-POST。要使用 HTTP-POST 以类似的方法执行 XML Web service,Web 页必须包含脚本,以便在用户单击某处导致消息发送回外部 Web 服务器时,将客户端重定向到 XML Web service。 下面的代码示例是一个包含恶意链接的 Web 页,该链接指向在客户端所在的 Intranet 上运行并使用 HTTP-GET 协议的 XML Web service。在此示例中,用户必须单击链接;不过,也有可能 Web 页包含执行重定向的脚本,因而不需要用户的交互操作。 <html> 同样,下面的代码示例是一个包含恶意按钮的 Web 页,该按钮能够与在客户端所在的 Intranet 上运行并使用 HTTP-POST 协议的 XML Web service 进行通信。 <form method="POST" action="http://AnIntranetServer/401K.asmx/ChangeWithholding"> 需要说明的是,这种情况对只能通过 HTTP 协议的 SOAP 与之通信的 XML Web service 不适用。SOAP 请求需要 SOAPAction HTTP 标头,而 Web 页不具有在使用链接的重定向中包含该标头的功能。 对基于 ASP.NET 的 XML Web Services 禁用 HTTP-GET 和 HTTP-POST 协议默认情况下,客户端可以使用以下三种协议与使用 ASP.NET 创建的 XML Web services 进行通信:HTTP-GET、HTTP-POST 和通过 HTTP 的 SOAP。使用 Microsoft .NET 框架支持的配置系统,您可以在单独的 Web 应用程序或整个计算机中修改 XML Web services 所支持的协议。 无论是在计算机上还是在单个 Web 应用程序中禁用 HTTP-GET 和 HTTP-POST,都只需修改配置文件,该文件在 .NET 框架中只是一个简单的文本文件。计算机的默认配置是在 Machine.config 文件中进行设置的,对于每个 Web 应用程序,您可以修改该 Web 应用程序的根目录中的 Web.config 文件而不是 Machine.config 文件。 在不需要 HTTP-GET 和 HTTP-POST 消息处理协议的生产用计算机上,最好在整个计算机中禁用对这些协议的支持。对于 XML Web service 客户端使用 HTTP-GET 或 HTTP-POST 与 XML Web service 进行通信的特殊情况,可以为使用这些协议的 Web 应用程序添加对这些协议的支持。 在整个计算机上禁用 HTTP-GET 和 HTTP-POST 协议(建议)
在单个 Web 应用程序上禁用 HTTP-GET 和 HTTP-POST 协议
在单个 Web 应用程序上添加 HTTP-GET 和 HTTP-POST 协议支持
此配置更改将在下一次对该 Web 应用程序上的 XML Web service 发出请求时生效。 禁用 HTTP-GET 和/或 HTTP-POST 的影响对于生产用计算机,禁用 HTTP-GET 和 HTTP-POST 协议所带来的弊端微乎其微。弊端包括:
对于投入使用的 XML Web service,这两个弊端都可以轻松克服,因为 Visual Studio .NET 提供了 Add Web Reference(添加 Web 引用)命令,使创建 XML Web service 的客户端变得非常简单。 总结提供用 ASP.NET 创建的 XML Web services 的生产用计算机应该在整个计算机中禁用对 HTTP-GET 和 HTTP-POST 消息处理协议的支持,以避免在很多情况下可能出现的安全问题。对于早期开发而言,您可以在开发用计算机上启用这些协议;这样,开发用计算机便可以使用服务帮助页面来测试 XML Web services。将计算机投入实际使用时,请修改 .config 文件以禁用 HTTP-GET 和 HTTP-POST 协议。 需要说明的是,这并不是 XML Web service 开发人员应当采取的唯一安全措施,它只是保护 XML Web service 的安全所涉及的诸多步骤和问题之一。 | ||||||
| webasp.net |