在大多数国家和地区,盗刷信用卡都是犯罪行为,数额巨大甚至是重罪。请不要以身试法
使用Stripe进行收款是一件非常简单的事情,用起来非常舒适,不想写代码就无代码,会写代码还想自己设计前后端可以用 Stripe Elements。
当你把事情做好了,把你的在线服务上线了,这个时候就一定要考虑一个问题:盗刷与测卡(卡号测试、银行卡测试)。
盗刷很好理解,用偷来的信用卡资料去你的网站上购物;测卡则是用小额交易或者其他方式来确定盗窃来的信用卡是可用的,然后后续再大额诈骗中使用这些信用卡。
毫无疑问,只要是在线电子商务,就一定无法避免盗刷与测卡的。
一个非常重要的事情是,商户、卡组织与Stripe都有责任与义务阻止盗刷和测卡。
也许有人不理解,为什么商户也有责任与义务阻止盗刷和测卡?我就是把 Stripe 的一个Payment Link放到了网上,某个不怀好意的人看到了去盗刷,主动给我送钱,我为什么要负责?
切勿贪小便宜!真正的持卡人发现了异常的付款记录,他们会去找发卡行争议,发卡行就会找到 Stripe,商户就需要应对争议,这期间不仅要承担争议费,在争议比例过高时Stripe还会封号、甚至罚款。
所以,遇到来源不明的欺诈付款,一定要全额退款,可不能贪小便宜。
不过如果对方是用支付宝、微信付款的那就不用管了,因为这俩应该是不支持争议的😂
前不久,我“惹毛”了一个黑产论坛。这个黑产论坛的人就开始盗刷+测卡。
比如这种,人在新加坡用墨西哥的卡🤨,再考虑到我的用户的大部分都是中国人,所以看起来怎么都很像盗刷。
后来他们盗刷不成还恼羞成怒开始DoS我了,峰值竟然有5500万。
至于我是怎么“惹毛”这群人的,以后也许可以写一篇来说说这件事,我觉得这其中的乐趣会比听相声还搞笑🤣,不笑我倒贴你100块。如果你还是想先了解一下,那么看这个Twitter就够了
本文的主题是,已经使用了Stripe,如何防患于未然,避免盗刷与测卡?假如在遭遇盗刷,需要立刻做什么事情?
Radar
Stripe Radar 是Stripe提供的一个反欺诈工具,基于强大的机器学习实现,并且可以自定义许多规则。比如ChatGPT不允许中国的卡付款,类似这样的规则,就可以Radar的规则实现。
Radar不收月费,而是从每笔交易里抽成,Stripe还是很良心而且很会赚钱的。
在遭遇盗刷的时候,立刻要做的事情就是开启 Radar,并且根据自己的情况调整灵敏度。同时,审核所有已经通过的付款,如果怀疑是盗刷的,要立刻全额退款,全额退款无法争议。在处理完之后,联系 Stripe客户表明自己的情况,要求他们提供协助和建议。
以新加坡为例,Radar风控团队版每笔交易 0.1新币,机器学习版每笔0.08新币。强烈建议开启团队版。
开启了Radar之后,我们可以在 Risk Control里调整Radar的灵敏度
根据自己的情况调整即可,比如我在面临大量盗刷的时候,把灵敏度调到了50,意味着所有风险分数高于50的付款都会被拒绝。
3DS
在某些地方,你可能会看到 Stripe 2D 的说法。这里的2D指的是在线刷卡的时候只要输入卡号、有效期、CVV并且无需进行身份验证(通常是短信或者App推送)。对应的需要验证的则是3DS
在开启了 Radar之后,就可以强制开启3DS了,这样对于盗刷的情况基本可以拦截一大部分,毕竟他们没有卡主的手机。
Radar – Rules- Authenticate Rules,三个默认的3DS规则全部打开
自定义阻止规则
每个人的业务都不同,比如我的这个业务下,美国人不太可能来用,更别提那些非常小众东南亚、加勒比海和非洲国家了。因此对于我来说,我只要允许中国、最多再包含港澳台的银行卡就可以了。
那么我们就可以添加一个这样的自定义阻止规则,表达式这么写,NOT要写最前面而不是写IN之前
NOT (:card_country: IN ('CN','HK','MO','TW'))
不想接受预付费卡,那么可以这样写
:card_funding: = 'prepaid'
只想接受中港澳台,允许任何国家的Apple Pay、Google Pay(这俩安全系数很高,不太可能是盗刷),那就这么写
Block if NOT (:card_country: IN ('CN','HK','MO','TW')) AND NOT(:digital_wallet: IN ('android_pay','apple_pay'))
3DS通过就接受,无所谓发卡国,可以这么写
NOT :is_3d_secure_authenticated:
某人在某黑产论坛:真不敢c cn的卡
在Stripe平台上,我们能做的事情差不多只有这么多了。为了防止测卡,我们还需要在自己的集成方式上下点功夫。
测卡的方式
测卡一般分两种,一种是授权,类似你在某些网站如Cloudflare绑定你的信用卡,并不会真正的扣款,App上一般能看到记录,但是每月账单上未必会有;另外一种则是付款,一般是小额付款,确认卡片有效准备来波大的。
检测测卡
首先当然是要检测到测卡。显著增加的拒绝交易其实就可以用来识别测卡。
- 尝试查看付款详情的时候,能看到Stripe会自动屏蔽测卡,如上面的这张截图
- Developers的overview页面图表能发现很多失败
- 在 Developers – Logs 里查找402,也会发现大量记录
在发现被搞了之后,我们要赶紧采取措施。哪怕赶紧找到测卡的人的IP给屏蔽了也是办法。当然坏人没那么笨,简单的防火墙规则未必会管用的。
保护 API Key
Stripe的API Key分为两种,一种是Publishable Key可以公开的;另一种是Secret Key,有这个Key就可以访问Stripe的系统和全球金融网络,所以万万不能泄漏
遇到测卡建议无论是否泄漏 secret key,都去吊销生成一个新的,并且添加IP访问白名单
优化集成方式
使用 Stripe有很多集成方式,使用 Stripe Payment Link、Stripe Checkout、Stripe Elements是推荐的方式
用这种集成方式, Radar能够自动捕获到更多的信息,更容易判断盗刷测卡。
其他的方式可能就需要自己手动提供信息了。
添加captcha
在请求创建 PaymentIntent之前可以加上一个验证码,比如 Cloudflare的turnstile就是非常好的选择。 这样对于大部分的垃圾请求都可以过滤了。
需要注意,turnstile是需要客户端+服务端实现的。只有客户端是不完整的。
频率限制
一般来说,单个IP创建 PaymentIntent 不应该太频繁,可以加上频率限制降低被刷概率。
登录会话
登录了才能购买,类似这种可以降低被刷成本
自定义规则
根据自己的业务情况,使用不同的规则来屏蔽测卡。甚至还可以根据IP地理位置和发卡国组合,就看想象力了
战果
这是屏蔽的付款,看这个时间这么接近,人在美国用着泰国、甚至一些奇怪的小国家的卡,风险系数非常高
大概拦截了3000欧,恐怖啊😂 最开始规则配置的不太正确,估计误杀了一部分
总结
- Stripe的文档还是挺不错的,SDK用起来也非常舒服。无论是stripe.js还是python bindings,写满了 type annotations,想用错都难
- Stripe的客服也很专业,响应非常迅速
- 坏人太多啦