接口防重放 是不是存粹的脱了裤子放屁?

2024-06-10 15:24:29 +08:00
 bigbigeggs

防重放解决的是攻击者拿到 url 和参数之后,不断地请求服务端。

  1. 服务端针对下单,支付,转账这种操作肯定有幂等,肯定不能胡来乱来

  2. 放重放生成一个 token ,这个 token 人人都知道如何生成的,比如 timestap+参数 用 md5 进行加密,攻击者也可以完全模拟这个 token 的生成规则,来绕过服务端

  3. 像 https ,客户端私钥加签服务端公验证,都是解决过程中的安全,放重放解决“客户端”的安全,感觉完全没必要,反而增加了成本

上周面试被问到,感觉存粹为了面试而面试,包括 sync ,lock ,多线程等,工作中根本用不到,完全不问业务上的问题,上来就啪啪的八股文走起。

为了面试由此写了一篇接口放重放的文章,欢迎大家指正,真感觉多次一举,为了面试而面试。

我真不相信,哪一家,真的在项目中写了防重放的实现逻辑。

13029 次点击
所在节点    Web Dev
94 条回复
hallDrawnel
2024-06-11 10:31:58 +08:00
你甚至已经分析到了掘金的点赞防重复逻辑,在进一步想放重放逻辑不是千篇一律的啊。我们所有有重放可能的接口都有防重放逻辑。
Cruzz
2024-06-11 10:35:25 +08:00
其实这些我一直有个疑问,不管用什么方式去做,都不能影响正常用户请求吧。比如 timestamp 过期了,正常的用户是给续期么?那么做攻击的人不是也可以续期。
lovelylain
2024-06-11 11:08:00 +08:00
防重放 token 可能是上一步接口后台生成返回,上一步接口可能是验证用户登录态是用户行为触发,登录态和 token 都有时效性。
sampeng
2024-06-11 11:16:54 +08:00
这个问题嘛。。。怎么说呢。只能说,你经验太少。所以觉得很无所谓。

我作为运维,要是谁的接口涉及到钱的不做防重放。我直接就贴脸放大了。是是是。你懒得做,然后我一看账单短信被刷几十万,被骂的人是我。研发来一句脱裤子放屁试试。。

这是主问题。次问题。。是是是,你用不到就是八股文。

那我是不是可以建一个画像:

1.crud Boy
2.不学习任何计算机底层知识。sync ,lock ,多线程在很多领域都要用。你只会 crud 当然涉及不到,你还不学。业务有啥?很高精尖吗?写个 crud 能写出花来?
3.对于技术只停留在表象,不深究其原理和为什么要这么做

你一句不信,我默默看着我司代码库里面这都是啥?我们组十年前的项目不带防重放,技术评审都过不去
tomkliyes
2024-06-11 11:56:52 +08:00
我理解的防重放:一个请求发过去了,但是服务器没有响应,客户端不知道是否成功了,如果没有幂等 id ,客户端再发一个请求过去,服务器可能把两个请求当成独立的,分别处理了。
aino
2024-06-11 11:57:16 +08:00
我以前和你一样的想法,后面我明白了,面试官问的就是想得到他想要的答案罢了,你想那么多干嘛呢,管他什么呢,问啥就说啥,你爽我也爽,也许你瞧不起面试官,觉得他问的东西浅薄,但是你也确实需要这份工作
iX8NEGGn
2024-06-11 12:36:20 +08:00
你把“重放”理解错了,计算机网络和网络安全相关书籍中都提到“重放攻击”,防重放是 HTTP 时代的一种安全措施,它是网络层的东西不是应用层,防的网络层中间人抓包后原封不动把包发给服务端。

不做防重放即使加密通信也没用,但 HTTPS 自带加密和防重放功能,如果现在还使用原先的防重放做法,那它的主要用作就是提高反扒的难度。
TeresaPanda
2024-06-11 12:42:22 +08:00
可以增加一点攻击者的调试难度吧
yankebupt
2024-06-11 13:02:21 +08:00
@bigbigeggs 如果客户端不那么瘦,可以拿到自己的公网 ip 地址,那么在不那么信任时间戳(比如网络很差或 CPU 调度很差,NTP 精确不到 1 秒)的时候还能多一种选择
毕竟重放攻击大部分时候是时间不同,ip 地址不同(有 ip 一样的,少见,毕竟攻击者自己拿不到回复了)
猜测神经过敏一点的人甚至会用包 TTL 波动 filter 重放攻击要求重新登陆,我觉得太容易误判了……
iX8NEGGn
2024-06-11 13:24:26 +08:00
至于 OP 说的 “我真不相信,哪一家,真的在项目中写了防重放的实现逻辑。”

我随便找了几个大厂的文档,签名中带有时间或者随机数的大都是用来放重放的:

阿里: https://help.aliyun.com/zh/sdk/product-overview/rpc-mechanism
SignatureNonce 参数的描述:“签名唯一随机数。用于防止网络重放攻击,建议您每一次请求都使用不同的随机数,随机数位数无限制。”

腾讯: https://cloud.tencent.com/document/product/551/15615
Nonce 参数的描述:“随机正整数,与 Timestamp 联合起来,用于防止重放攻击。”

火山: https://www.volcengine.com/docs/6469/93892
t 参数的描述:“来自火山引擎的事件通知请求默认过期时间是 10 分钟,如果一条事件请求通知中的 t 值所指定的时间已经过期,则可以判定此条事件请求通知无效,通过此方法可以防止网络重放攻击。”
lyxxxh2
2024-06-11 13:49:53 +08:00
第一次听说"接口防重放",查了下资料:
"一条消息表示用户支取了一笔存款,攻击者完全可以多次发送这条消息而偷窃存款。"
--- 来自: https://juejin.cn/post/6890798533473992717
总结: 扯淡。
1. 发多次? 难道不校验金额?
2. 并发的话,接口幂和悲观锁是吃干饭的?
楼主第一句也说了:
"服务端针对下单,支付,转账这种操作肯定有幂等,肯定不能胡来乱来"

***
重放攻击(英語:replay attack ,或称为回放攻击)是一种恶意或欺诈的重复或延迟有效数据的网络攻击形式。 这可以由发起者或由拦截数据并重新传输数据的对手来执行。这是“中间人攻击”的一个较低级别版本。
--来自: https://zh.wikipedia.org/wiki/%E9%87%8D%E6%94%BE%E6%94%BB%E5%87%BB

所以可知,防重放就是专门针对这种攻击。
不过正如楼主所说: 大部分都是 https,你都获取不到客户端请求。
我也赞同是脱了裤子放屁。
除非你项目是金融级别的。
SSang
2024-06-11 13:56:18 +08:00
很明显,你对重放的理解就不对。防重放是用来防中间人攻击的。不然你以为 https 的 seq_num 是用来干什么的。客户端攻击那不叫重放,最多叫 DDOS
SSang
2024-06-11 13:58:39 +08:00
还有,幂等是幂等,重放是重放,看起来好像都是请求两次相同的数据,本质上一个是客户端行为,一个是中间人行为,一个是业务,一个是安全。
SSang
2024-06-11 14:13:20 +08:00
1. 下单,支付,转账,这种一般是做幂等,但做不做幂等和做不做防重放没有关系。不是说你幂等了就不需要防重放了。
2. 客户端一般只生成 nonce ,生成 token 干嘛?除非你要搞回调。
3. 重放解决的是过程安全,你说的所谓客户端安全,那叫防抖或防 DDOS 吧。
zhwguest
2024-06-11 14:35:38 +08:00
@Richared 正常用户基本上不可能重复出现 nonce ,如果有重复的 nonce 了,那基本上不是正常用户了,当然不提供正常服务啊。
enumer
2024-06-11 14:41:52 +08:00
安全不绝对就是绝对不安全
looveh
2024-06-11 14:46:23 +08:00
@wind1986 我也没用过,工作 7,8 年了。难怪这么菜😭我对锁什么的概念都很模糊
Nosub
2024-06-11 15:10:10 +08:00
op 主应该很少抓包,防止重放肯定不是脱裤子放屁;

很久之前我就写了一篇文章,
HTTP 请求数据签名原理以及实战,https://nosub.net/posts/p/72
对所有 HTTP 请求和返回数据做签名校验,拒绝中间人攻击; https://nosub.net/posts/p/70
zephyru
2024-06-11 15:10:30 +08:00
安全上用处的确不大,防脚本小子的确是很有用...毕竟打开 F12 复制个接口请求,各种模拟组合拉数据成本实在太低了...
虽然逆向肯定是拿的到这些重放用的参数,但怎么都是成本不是
dif
2024-06-11 15:49:46 +08:00
多线程经常用到吧。

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

https://ex.noerr.eu.org/t/1048255

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

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

© 2021 V2EX