关于安全的建议:对投入使用的 XML Web Services 禁用 HTTP-GET 和 HTTP-POST 协议

转载 2006年05月22日 21:26:00
关于安全的建议:对投入使用的 XML Web Services 禁用 HTTP-GET 和 HTTP-POST 协议
由于 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 客户端(如 Microsoft? Internet Explorer)浏览一个包含链接的恶意 Web 页。
2 Web 服务器向客户端返回一个包含恶意链接的 Web 页。当用户单击该链接时,即对客户端所在的 Intranet 上的 XML Web service 发出请求(用户并不知道该请求)。
3 恶意 Web 页将使用基于 Web 页提供的参数和用户凭据向 XML Web service 发出请求。

只有在下列条件下才会发生图 1 所示的情况:
XML Web service 支持使用 HTTP-GET 或 HTTP-POST 消息处理协议进行通信。(使用 HTTP-POST 的情况比较复杂,请参阅以下关于 HTTP-POST 的代码示例。)
恶意 Web 页的外部开发人员了解 XML Web service 是否存在以及如何调用的详细信息。
客户端具有执行内部 XML Web service 的访问权限。

虽然这种情况概括的是如何使用 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>
<body>
<a  HREF = "http://AnIntranetServer/401K.asmx/ChangeWithholding?PreTax=  0@PostTax=0">快速致富!</a>
</body>
</html>

同样,下面的代码示例是一个包含恶意按钮的 Web 页,该按钮能够与在客户端所在的 Intranet 上运行并使用 HTTP-POST 协议的 XML Web service 进行通信。
<form method="POST"  action="http://AnIntranetServer/401K.asmx/ChangeWithholding">
  <input type="hidden" name="pretax" value="2.5">
  <input type="hidden" name="posttax" value="3.5">
  <input type="submit" value="快速致富。单击此处了解详细消息。" ></p>
</form>

需要说明的是,这种情况对只能通过 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 协议(建议)
使用常用的文本编辑器打开 Machine.config 文件。(默认安装将 Machine.config 放在 C:/WINDOWS/Microsoft.NET/Framework/v1.0.3705/CONFIG 文件夹中。)
在 webServices 节中标出添加 HTTP-GET 和 HTTP-POST 支持的命令行。执行此操作后,webServices 节应如下所示:
<webServices>
    <protocols>
      <add name="HttpSoap"/>
          <!-- <add name="HttpPost"/> -->
         <!-- <add name="HttpGet"/>  -->
      <add name="Documentation"/>
     </protocols>
</webServices>
保存 Machine.config。
此配置更改将在下一次对该计算机上的 XML Web service 发出请求时生效。
在单个 Web 应用程序上禁用 HTTP-GET 和 HTTP-POST 协议
使用常用的编辑器打开 Web 应用程序根目录中的 Web.config 文件。(如果不存在 Web.config 文件,则创建该文件。)
修改 Web.config 的 webServices 节,使用以下格式显式删除 HTTP-POST 和 HTTP-GET 协议(如果 Web.config 文件不包含 webServices 节,则添加该节):
<webServices>
     <protocols>
       <remove name="HttpPost" />
       <remove name="HttpGet" />
     </protocols>
</webServices>
保存 Web.config。
此配置更改将在下一次对该 Web 应用程序上的 XML Web service 发出请求时生效。
在单个 Web 应用程序上添加 HTTP-GET 和 HTTP-POST 协议支持
使用常用的编辑器打开 Web 应用程序根目录中的 Web.config 文件。(如果不存在 Web.config 文件,则创建该文件。)
修改 Web.config 的 webServices 节,使用以下格式添加 HTTP-POST 和 HTTP-GET 协议(如果 Web.config 文件不包含 webServices 节,则添加该节):
<webServices>
     <protocols>
       <add name="HttpPost" />
       <add name="HttpGet" />
     </protocols>
</webServices>
保存 Web.config。

此配置更改将在下一次对该 Web 应用程序上的 XML Web service 发出请求时生效。
禁用 HTTP-GET 和/或 HTTP-POST 的影响

对于生产用计算机,禁用 HTTP-GET 和 HTTP-POST 协议所带来的弊端微乎其微。弊端包括:
XML Web service 的默认服务帮助页面继续有效,但潜在的客户端将无法使用服务帮助页面上的 Invoke(调用)按钮测试 XML Web service。
如果要在 Microsoft Visual Studio? .NET 中调试 XML Web service,您必须创建一个测试客户端程序。

对于投入使用的 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 的安全所涉及的诸多步骤和问题之一。

相关文章推荐

HTTP协议下Android web应用GET和POST请求方法的请求、响应、传参

一、Eclipse创建Dynamic Web Project工程 1、File——new File——写入工程名——Target runtime下面选折Apache tomcat v8.0 并点选右...

Http协议自测工具(Get or Post)

  • 2014年12月23日 11:28
  • 10KB
  • 下载

java实现的利用HTTP协议原理实现的GET/POST请求的web服务器

1.HTTP协议原理 (1)连接 (2)请求 (3)应答 (4)关闭连接 2.为了测试不同的请求,写了两个html文件。 get.html Documen...

WCF Web HTTP get post wcf reset ful

  • 2014年05月06日 17:02
  • 1.04MB
  • 下载

实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现

本文讲解了如何使用libcurl封装出异步的Http协议Get、Post和文件上传功能。

Android使用http协议的GET和POST方法!!!

前几天刚入职,研究了一下android里面的http协议的get和post请求: Android里面有HttpClient可以用来访问网页的接口,下面来介绍HttpClient接口的使用, 1.GET...

iOS中的HTTP协议 如何使用GET和POST

一、URL 基本介绍URL的全称是Uniform Resource Locator(统一资源定位符) 通过一个URL,能找到互联网上唯一的一个资源 URL就是资源的地址、位置,互联网上的每个资源都...

使用HTTP请求协议之Post与Get方法的区别

HTTP请求:GET与POST方法的区别   HTTP 定义了从WWW服务器传送超文本到本地浏览器的协议,它是万维网协会和Internet工作小组合作的结果。最基本的方法有 GET、POST、HEA...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于安全的建议:对投入使用的 XML Web Services 禁用 HTTP-GET 和 HTTP-POST 协议
举报原因:
原因补充:

(最多只允许输入30个字)