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

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

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

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

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

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

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

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

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

13027 次点击
所在节点    Web Dev
94 条回复
binux
2024-06-10 23:38:42 +08:00
最近做了一个买票刷票软件,虽然它对请求加密了,但是就是因为没有防重放,连解密都省了
purrgil
2024-06-11 00:07:57 +08:00
不防重放的话,抓包,下载个 curl 然后复制 http 请求到.bat 里循环执行,就直接刷得飞起了。
weijancc
2024-06-11 00:17:19 +08:00
我之前爬过许多大网站的接口, 防重放可以说是基操了.
macaodoll
2024-06-11 00:26:48 +08:00
一看就是没接触过电商抢购功能。
yxzblue
2024-06-11 00:50:23 +08:00
攻击者也可以完全模拟这个 token 的生成规则,来绕过服务端

攻击者怎么会知道服务端的生成规则?
skuuhui
2024-06-11 08:17:29 +08:00
在移动端刚兴起的年代,大部分防重放是为了解决弱网环境下重试导致的无效请求的问题。现在技术成熟了,确实失去了百分之 99 情况下的用处了。现在还执着追求这个的,要么历史原因,要么过于迂腐了。对于大部分程序员来说,模仿很容易,动脑真的很难
crackidz
2024-06-11 08:19:27 +08:00
重放不是指 TCP 流重放,是指 HTTP 的接口重放,不在同一层。
即便通过 token 防止重放,也不应该单纯使用三方都知道的信息生成,至少应该包含攻击方不知道的信息
dj721xHiAvbL11n0
2024-06-11 08:34:20 +08:00
你要不先看看你有多少错别字?
2.token 的生成,是一种对原信息的签名操作,因为只有服务器有秘钥,所以你不可以伪造
3.https 客户端什么时候能用私钥签?服务器用公钥验,你要不要看看你说的什么?
darkengine
2024-06-11 09:19:55 +08:00
想得挺美,我是不会点那个链接 /狗头
InkStone
2024-06-11 09:39:41 +08:00
1. 防重放的 nonce 可以服务端生成下发。
2. 仅客户端也可以做防重放的,加固了解一下。别说什么加固也可以破,现实是就是有很多加固现在还好好运行在那里没被破。
wqhui
2024-06-11 09:47:07 +08:00
https 保证的是传输过程安全,但你怎么保证发起请求的人是可信的
请求的 token 一般会混入一些像私钥一样的东西,要生成先得盗私钥

多线程之类的不算八股文,日常偶尔就用,除非问你底层 JVM 怎么实现 sync 跟 lock ,19 年的账号居然没用过多线程。。
geligaoli
2024-06-11 09:54:36 +08:00
接口的重放攻击,基本是必然遇到的。做过的项目,只要用户量一大,无论是否公开,必然在日志里面会记录到重放攻击。处理实际也好办,幂等或 hash 过滤。
FawkesV
2024-06-11 09:58:32 +08:00
sync ,lock ,多线程 这不是很常用的吗??
dhb233
2024-06-11 10:00:26 +08:00
一个很现实的问题,支付接口是幂等的,QPS 能支持多大?防重放能支持多大 QPS ?
jqknono
2024-06-11 10:03:27 +08:00
认清自己
cnevil
2024-06-11 10:05:21 +08:00
"放重放生成一个 token ,这个 token 人人都知道如何生成的,比如 timestap+参数 用 md5 进行加密,攻击者也可以完全模拟这个 token 的生成规则,来绕过服务端"
我怀疑你连 token 都没搞明白
blankmiss
2024-06-11 10:07:36 +08:00
包括 sync ,lock ,多线程等,工作中根本用不到 , 你们是什么公司 还是说你菜的一匹
salmon5
2024-06-11 10:09:25 +08:00
salmon5
2024-06-11 10:11:29 +08:00
你以为客户端 HTTPS 安全,客户端的浏览器可不老实。
zhwguest
2024-06-11 10:15:18 +08:00
接口上 timestamp + nonce ,nonce 在 now + timer 时间范围内缓存,非常简单基础的方案,自己把问题想岔了吧?

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

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

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

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

© 2021 V2EX