这篇文章主要是简单的谈谈在线支付的一些安全性漏洞,以及一些编码建议,最后附件是web安全的一些CheckList检查项。
一、 常见漏洞
1、支付过程中可直接修改数据包中的支付金额
这种漏洞是支付漏洞中最常见的。 开发人员为了方便,直接在支付的关键步骤数据包中直接传递需要支付的金额。 而这种金额后端没有做校验,传递过程中也没有做签名,导致可以随意篡改金额提交。
2、没有对购买数量进行限制
2.1、产生的原因是开发人员没有对购买的数量参数进行严格的限制。 这种同样是数量的参数没有做签名,导致可随意修改。
2.2、经典的修改方式就是改成负数。 当购买的数量是一个负数时,总额的算法仍然是“购买数量x单价=总价”。 所以这样就会导致有一个负数的需支付金额。 若支付成功,则可能导致购买到了一个负数数量的产品,并有可能返还相应的积分/金币到你的账户上。
2.3、也有将数量改成一个超大的数。结果可能导致商品数量或者支付的金额超过一定数值而归0。
3、请求重放
未对订单唯一性进行验证,导致购买商品成功后,重放其中请求,可以使购买商品一直增加。
4、其他参数干扰
由于对商品价格,数量等以外的其它会影响最终金额参数(如:运费)缺乏验证导致最终金额可被控制。
二、 编码建议
1、对传递的金钱,数量等对最后支付金额会产生影响的所有参数做签名。并且注意签名算法不可被猜测到。使被修改过的数据无法通过验证。
2、对重要的参数进行校检和有效性验证。
3、注意验证订单的唯一性,防止重放攻击。
三、 安全检测CheckList
附件:点击即可下载
Web安全检查点.xlsx