我正在PHP网站的服务器A 上构建一个客户区,它将请求发送到单独的数据服务器(服务器B),要求提供与之相关的原始数据特定客户的项目。
系统需要合理安全,但在合理范围内(我需要在易于实施和安全性之间取得平衡)。
这是我第一次建立一个具有这种安全要求的系统,所以不确定(a)应该达到什么样的平衡,以及(b)首先有多种可能的方法是有意义的。 / p>
有些观点:
我正在想像 / userid / deviceid / daterange 这样的调用 REST api 但是我不清楚如何保护传输并阻止客户端访问通过制定URL方案,其他客户的数据。
似乎 SSL 是确保数据传输安全的最低要求,但我不确定用户之间的身份验证和封锁。
方法的想法
为每个客户提供一个唯一的密钥。对于每个请求,这将使用请求参数进行哈希处理,并与请求的纯文本版本一起发送,如下所示:
Hash: 202745aff8ed5354f2a8cce94b324afecfad56465cb48d676fd230fa6f2a18f5
Request params: /123/456/2015010120150714
服务器B对存储的密钥和请求参数执行散列,并检查这是否与已发送的内容匹配。如果是,并且用户ID,设备ID和日期范围有效,则它将响应所请求的数据。
这种方法的明显弱点是关键 - 如果存储在Web服务器上的副本被泄露,那么任何人如果知道用户ID和设备ID,就可以从数据服务器请求数据。通过仅接受来自Web服务器IP的请求可以稍微减轻这种情况,但如果受到恶意脚本的攻击,这将无效。
任何建议都会有所帮助。正如我所说的那样,对于安全方面我是相当noobian所以请温柔!
修改
客户端登录服务器A上的CMS;服务器A和服务器B之间的连接不需要他们的凭证 - 这个问题唯一的认证是确保只有服务器A可以与服务器B通信,并且该通信是安全的。
如果已经进行了SSL握手,那么进一步考虑它是否足以从PHP中的Web服务器发出POST请求?