场景一:转账交易
假设我要做个转账的app叫支付宝,要完成转账的功能,转账时,需要输入对方支付宝账号和姓名,然后点击转账,输入支付密码,就可以完成转账的功能。
实现方式,客户端通过http协议发送转账报文给服务端
报文无加密和签名机制
现在用户甲要转账给用户乙。
安全隐患
网络传输不安全,如果有人截取客户端请求报文,进行篡改,比如篡改收款方的支付宝账号和真实姓名,那么服务端就会把钱转到别的地方去。
结论:需要防止报文被篡改
场景二:移动支付
某商城A要接支付宝移动支付,大致流程:
- 客户端app调用支付宝的sdk发送支付报文
- 客户端接收支付宝服务端的处理响应
- 商户服务端接收支付宝服务端的交易成功通知
客户端发送请求的安全隐患同场景一
服务端接收通知时,存在如下隐患,黑客甲,去商城A
人为模拟支付宝的通知报文,将订单变成成功。
这是一个通知报文要做签名的案例
需要注意的是,步骤2和3同样需要做签名验证
结论:需要确认报文来自真实合法的服务端(其实在商户对商户的通信过程中,也需要确认报文来自真实合法的客户端)