Web服务漏洞修复小记

引言

对于电商管理综合平台,我们提供了通过Web服务接口,为客户端提供了订单下载的功能,此Web服务接口,将调用我们后台服务接口里的一些方法,我们将其重新封装,为电商管理综合平台提供Web服务,服务的主要功能是平台订单下载。

目前Web服务情况

在订单下载服务的项目里,我们新建了一个Web服务站点,通过添加一些公开的Web服务,为客户端程序,提供订单下载功能,同时,Web服务里,还有促销活动设置接口和订单导入接口。前期上线时,因为是Web服务是部署在聚石塔里,考虑到调用服务的安全性,我们简单的为每个公开的方法,添加了调用密码参数。在每个服务方法里,我们进行了调用权限的判断。同时,我们也加入了调用IP限制。因为聚石塔上的web服务是采用IP地址调用的,对于目前采用的安全措施,我们认为应该可以了。

出现Web服务漏洞

Web服务接口的密码参数,我们采用密码生成器生产了一个很复杂的32位密码,并定期更换调用密码。但是,这样的接口设计显然是不符合安全规范的,如果密码泄露,系统安全将受到威胁。这时,我们也收到了聚石塔漏洞检查报告,我们的soap接口由于客户端鉴权不当,导致http请求可被恶意利用。希望我们能够尽快修复,并给出了相应的修复建议:

  1. soap接口访问尽可能绑定客户端IP白名单 ,非白名单ip拒绝访问接口
  2. soap接口访问增加客户端签名,签名的生产方式可为:访问的接口相关参数+时间戳+加密TOKEN 进行整体加密(如MD5,或其他加密方式),签名必须设置有效期(建议有效期60分钟),以防止http请求被滥用重放攻击
  3. soap接口在获取客户端请求时,进行数据库查询前,需对当前用户的身份进行鉴权,以防止越权行为的发生(如A用户可以越权查看B用户的数据)
  4. 客户端不建议提供可进行sql查询类或自定义sql(客户端自定义sql语句等),所有查询操作必须在服务器端进行。
  5. 服务器端soap接口代码加强防sql注入攻击,所有接口参数必须进行防sql注入函数进行强过滤。

Web服务漏洞修复

安装聚石塔修复漏洞的建议,我们重新设计了Web服务,并对部署在聚石塔上的Web服务的漏洞进行了修复。我们将现有的Web服务方法,原Public修改为Private。并按照修复建议,重新设计一个统一调用入口。

统一调用入口-1

统一调用入口-2

MySoapHeader

代码解析

  1. 加入了SoapHeader头,并在自定义的MySoapHeader类里进行调用权限判定;
  2. sign签名参数,将在本地进行加密后,再传递给Web服务接口的sign参数;
  3. Method参数为需要调用的参数名称。