带有https WSDL的SOAP是否安全?

时间:2015-10-14 14:35:21

标签: php web-services soap https wsdl

我正在使用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的地址。一切正常 - 我能够毫无问题地返回和发布数据。

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

我知道有WS-Security,但如果一切都超过了https,那还需要吗?

由于

1 个答案:

答案 0 :(得分:0)

回答安全问题需要问自己我们想要保护什么,以及攻击媒介是什么。

简而言之,根据您的要求,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编号时,只有银行才知道。

Example mobile POS

抱歉,我找不到过去几年我在这个场景中做过的大学工作,因为我有一个关于它的幻灯片。

然后SSL 还不够可以使用WS-Security执行以下操作:

  • 客户端形成一条SOAP消息,其中包含使用后端服务器密钥
  • 加密的卡号
  • 客户端将带有包含商品的采购订单的SOAP邮件包含在内,并将其发送到您的服务器,即使是通过HTTP
  • Web Server接收采购订单并准备订单
  • Web Server接收为银行加密的不可读SOAP消息并发出付款订单
  • 付款成功后,订单已下达