带有 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 消息并发出付款指令
- 付款成功后,订单即送达
我正在开发一个使用 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 消息并发出付款指令
- 付款成功后,订单即送达