支.付宝收到异步回调后有必要再主动向支.付宝发一个请求确认订单状态吗?

2023-05-04 21:44:59 +08:00
 LLaMA
3261 次点击
所在节点    程序员
46 条回复
LLaMA
2023-05-05 01:42:37 +08:00
@haha512 改 return_url 需要商户私钥签名,假设商户私钥泄露了,如果攻击者不支.付,支.付宝也不会给攻击者签名 return 的数据,如果攻击者换成自己的收款账号那 appid sellerid 之类验证都过不了了
jenlors
2023-05-05 08:12:40 +08:00
感觉是不是代码里面验签逻辑的问题,建议好好看看代码。另外不要完全依赖同步接口,因为用户可能支付完成直接关掉界面不进行跳转。
wqhui
2023-05-05 09:21:33 +08:00
是不是代码逻辑有 bug ,支付宝印象中是 rsa 的签名,私钥只在支付宝平台那边,其他人改参数后没有重新生成签名,签名就对不上了
Felldeadbird
2023-05-05 09:45:03 +08:00
日订单数量不多,财务又勤快校验的话可以信任异步回调。

反之将回调的信息发给支付宝确认订单状态是为了避免回调被人恶意发起,实现伪造支付请求。
haha512
2023-05-05 09:46:27 +08:00
return_url 并不参与签名。
异步通知的 url 需要在支付宝控制台填写,会验证。所以异步里更新订单是比较安全的。
skyrem
2023-05-05 10:17:26 +08:00
支付宝有很多支付产品,当面付 和 手机网站支付 接入上都差不多,回调体也差不多,我记得 手机网站支付 如果用户取消也会有回调,只是状态码不一样
changepll
2023-05-05 10:41:52 +08:00
在异步中,查一下订单状态是必要的。 这样伪造都没办法伪造。
不用查的前提是代码,密钥之类的没有出现泄密
azui999
2023-05-05 10:43:23 +08:00
支付宝
kcnine
2023-05-05 11:06:36 +08:00
@LLaMA 支付宝的私钥当然不太可能泄漏,我是怀疑你们程序都被加了后门了,或者代码本身就有漏洞
justfindu
2023-05-05 11:08:58 +08:00
确认就是你们系统出现了 bug. 不要怀疑自己. 我之前也看到群里有个人说这个问题. 就是被绕过去了
lopssh
2023-05-05 11:11:19 +08:00
肯定要验证啊,回调只是通知,没收到通知也得定时主动验证。
异步通知已经是异步请求了,增加一个验证又不会影响你的体验,加。
一般两个都要实现。
我之前接手过一个系统,支付回调里连支付状态是不是 success 都没判断,直接就拿 id 更新订单状态了,😂幸亏财务一直在一笔笔的核对。
vcbal
2023-05-05 11:11:32 +08:00
@LLaMA 他们是说商家私钥有没有丢啊。。你们要是还没加白名单 ip 的话,配置被盗了,劫持请求不就是实现你说的这个情况
lopssh
2023-05-05 11:12:02 +08:00
return_url 并不参与签名。
异步通知的 url 需要在支付宝控制台填写,会验证。所以异步里更新订单是比较安全的。

支付宝有很多支付产品,当面付 和 手机网站支付 接入上都差不多,回调体也差不多,我记得 手机网站支付 如果用户取消也会有回调,只是状态码不一样。

在异步中,查一下订单状态是必要的。 这样伪造都没办法伪造。
不用查的前提是代码,密钥之类的没有出现泄密。
vcbal
2023-05-05 11:13:17 +08:00
@LLaMA 同步的接口 不去请求一下订单状态吗?这个是代码逻辑问题吧
Anivial
2023-05-05 11:20:28 +08:00
“伪造的同步通知请求验签可通过”,问题不是很明显了吗?
1. 支付宝私钥泄露
2. 你的验签代码有问题
那你觉得哪个可能大呢?如果你都换成同步,那订单数量多了之后怎么办,而且你代码上的漏洞还是没解决
vZexc0m
2023-05-05 11:27:28 +08:00
异步通知验签过了基本没有问题。排查下自己代码问题。支付宝异步通知时未收到正常 response 会重复发起异步通知。
楼上说更改 URL 的不成立,因为所有参数都要参与签名。
brader
2023-05-05 11:32:36 +08:00
楼主,不管是你代码问题,还是支付宝或你们导致的资料泄露,反正都是有人盯上你们了,其他措施你该怎么补救怎么补救,我给你一个额外的建议:
你尽快更换回调地址的 url 吧,不然一直有人知道你回调 url ,骚扰你,也挺烦的。你可以换成如: https://xxx.com/callback/bdxZYgAHF1V2yCMD 这样的地址,后面加了一串随机字符串,注意:这个策略不保证你的接口安全,仅是让攻击者不那么容易找到你的回调 url ,避免大部分麻烦。
LLaMA
2023-05-05 12:28:52 +08:00
@Anivial 支.付宝私钥商家根本接触不到,验签用的是支.付宝官方提供的示例代码
@azui999 v 站注册 180 天才能发这个词
@lopssh 如果用户取消也会有回调 我也怀疑是用类似这种的方法,一直无法复现成功
Anivial
2023-05-05 14:12:53 +08:00
@LLaMA #38 官方验证只是能证明参数加密没有错误,你有完整对比订单号,appid 这些信息吗?
官方的文档:
商家需要验证该通知数据中的 out_trade_no 是否为商家系统中创建的订单号。
判断 total_amount 是否确实为该订单的实际金额(即商户订单创建时的金额)。
校验通知中的 seller_id (或者 seller_email) 是否为 out_trade_no 这笔单据的对应的操作方(有的时候,一个商家可能有多个 seller_id/seller_email )。
验证 app_id 是否为该商家本身。

如果这些信息都能被伪造,我只能说你的网站真的很有价值,能被呢么大手笔来攻击
ytmsdy
2023-05-05 14:36:29 +08:00
@LLaMA
要么是 key 泄露了,要么是有内鬼。
支付成功的通知的逻辑是经历了这么多年,每年这么大数量的交易,不太可能出问题的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/937373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX