今天阅读了一下cft的商户支付接入文档,发现对安全支付这块,包括防止钓鱼等其实是有一些低成本的方案的:
1, 提交请求使用https协议,而不是http协议,可以防止信息在传输通道的安全。
2, 重要信息走后台通知,而不是单独的前端页面跳转。
3, 提交请求考虑更多的使用POST提交,少用GET,原因大家可以自己考虑。
4,提交参数进行数字签名,防止信息被串改;
5,把用户客户端的Ip也作为参数进行提交,同时,该IP作为数字签名的一部分,服务器验证请求的来源IP是否跟参数的一致,为什么?
想象一个场景:用户A把用户B的请求串拷贝都自己本机上去执行,当然假设A和B的IP 出口不一样。
6,双向确认机制保证安全性,如支付后台通知给到商户一个notify_id,商户通过该notify_id从CFT接口进行反查支付订单。
注意:这里的notify_id是有有效期的,时间为2 min。
7,前端跳转refer机制验证,当然有些浏览器支持不好导致问题,而refer必须跟接入商户的域名配置一致。
这里有个小技巧:在内网测试的时候,对refer验证不通过的情况,因为refer可能是localhost,这里CFT给到一个方案是允许金额在100分以下进行支付,方便调试。
这就是安全性和可用性,方便性的trade - off 问题了。
8,总之,安全问题的策略是从低成本的方案提高恶意用户的“作案”门槛,同时,需要设置多个多层门槛,实行层层保护,像“洋葱”一样,一层剥掉里面还有一层。