带有 https WSDL 的 SOAP 安全吗?

Is SOAP with a https WSDL secure?

我正在开发一个使用 PHP 和 SOAP 连接到 Web 服务的项目,我有一个关于安全性的问题。

在基本层面上,我的代码如下:

// Connect to web service
$client = new SoapClient( 'https://mywebservice.com:8443/whatever?wsdl' );

// Store the response after passing my values for that service
$response = $client->my_service( $my_args );

SoapClient URL 通过 https,是 WSDL 的地址。一切正常 - 我可以毫无问题地 return 和 post 返回数据。

将使用它的网站正在全站使用 SSL。我的问题是——如果我们对 WSDL 使用 https,上述方法是否可以安全地来回传递敏感数据?或者我应该用我不知道的 SOAP 做一些额外的事情吗?

我知道有 WS-Security,但如果一切都通过 https,是否需要它?

谢谢

回答安全问题需要自问我们正在努力保护什么,以及可能的攻击媒介是什么。

总之HTTPS,从你的要求来看,是安全的。这是因为您在询问 SSL 是否可以安全地保护 Web 服务器知道并希望发送到后端服务器的信息。 SSL就是为此。您不需要使用额外的 WS-Security 特性。至少请验证服务器证书。

只要所有网站都在 SSL 下运行并且您实现了安全网站的所有常见要求(包括 HSTS header 并拒绝为 HTTP 请求提供服务),这就是安全的。我这样说是因为我假设您可能想要保护的敏感数据来自客户端。

示例 1

举个例子,假设一个信用卡支付系统存在漏洞。

  • 客户端通过 HTTPS 连接到 Web 服务器并发送 CC 号码。没人能看到
  • 服务器通过HTTPS将卡号推送到后端。没人能看到
  • 后端将信用卡号明文存储在数据库系统中

答案将是:“好的,您正在保护 Web 服务器和后端之间的通信,但要注意有人有兴趣查看数据库”。想象一下能够转储信用卡数据库的 HTTPS 网站上的 SQL 注入漏洞。这不是 HTTPS 的目的。

示例 2

现在让我们检查另一个 HTTPS 不够用的场景。基本上,HTTPS 保护端到端通信。这是我的要求:

  • 付款授权必须由请求付款的机器永久签名,并存储在第三方服务中以备将来审核

显然 SSL 无法解决这个问题。假设您的 Web 服务是社区的一部分,并且后端服务器与多个 Web 服务器通信。 SSL 将保护和验证 Web 和后端之间的流量,但是后端服务器可以存储任意有效的 SOAP 消息,声称它们来自您的 Web 服务器

您必须为此签署 SOAP 负载,并使用 WS-Security。负载可以传输到第三方审计服务,封装在后端服务验证的外部 SOAP 消息中。

示例 3:让事情变得复杂

现在让我改变你的问题。 “如何允许客户端向 Web 服务器发送服务器 无法 读取但后端 可以 读取的敏感信息?”。

例如,当 POS 机(如下图,由 Google 图片提供)想要向您的网络服务器发送采购订单而不透露 CC 号码时,只有到银行。

抱歉,我找不到我在过去几年所做的关于这种情况的大学工作,因为我有一张关于它的幻灯片。

那么 SSL 还不够,您 可以 使用 WS-Security 来执行以下操作:

  • 客户端形成一个 SOAP 消息,其中包含使用后端服务器密钥加密的卡号
  • 客户端将该 SOAP 消息与包含项目的采购订单一起发送到您的服务器,甚至通过 HTTP
  • Web 服务器获取采购订单并准备订单
  • Web 服务器获取为银行加密的不可读的 SOAP 消息并发出付款指令
  • 付款成功后,订单即送达