我正在使用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,那还需要吗?
由于
答案 0 :(得分:0)
回答安全问题需要问自己我们想要保护什么,以及攻击媒介是什么。
简而言之,根据您的要求,HTTPS是安全的。这是因为您询问SSL是否可以安全地保护Web服务器知道并希望发送到后端服务器的信息。 SSL就是为了这个。您不需要使用其他WS-Security功能。至少请验证服务器证书。
只要所有网站都在SSL下运行,您就可以安全地实现安全网站的所有常见要求,包括HSTS header并拒绝提供HTTP请求。我这样说是因为我假设您可能希望保护的敏感数据来自客户端。
例如,假设信用卡支付系统存在漏洞。
答案是:“好的,您正在保护Web服务器和后端之间的通信,但要注意有人对查看数据库感兴趣”。想象一下,HTTPS网站上的SQL注入漏洞能够转储信用卡数据库。这不是HTTPS的用途。
现在让我们来看看HTTPS不够的另一个场景。基本上,HTTPS保护端到端通信。这是我的要求:
显然,SSL无法解决此问题。假设您的Web服务是社区的一部分,后端服务器与多个Web服务器进行通信。 SSL将保护和验证Web和后端之间的流量,但后端服务器可以存储任意有效的SOAP消息,声称它们来自您的Web服务器
您必须为此签署SOAP有效内容,并使用WS-Security。有效负载可以传输到第三方审计服务,封装在由后端服务验证的外部SOAP消息中。
现在让我改变你的问题。 “我如何允许客户端向Web服务器发送服务器无法读取但后端 可以读取?”的敏感信息。
例如,当POS机(如下图所示,Google图片提供)想要向您的网络服务器发送采购订单而不泄露CC编号时,只有银行才知道。
抱歉,我找不到过去几年我在这个场景中做过的大学工作,因为我有一个关于它的幻灯片。
然后SSL 还不够,可以使用WS-Security执行以下操作: