请问如何实现 http 请求防止篡改呢

312 天前
 zx9481

目前有一个网课看视频的功能 前端需要每隔 5 分钟请求后端更新课程播放记录(学习记录),为了防止客户端篡改请求参数,请问该如何实现呢?

5699 次点击
所在节点    Java
48 条回复
lambdaq
312 天前
最简单的方式是只允许一个 http 连接。
mmdsun
312 天前
前端请求的参数,拿到算一个 md5 之类的,得到一个 sign 值,携带请求头里面。

后端接收数据并校验 sign 值。所以,重点是保护好前端的加密逻辑和算法。
honamx
312 天前
后端接口做个频率校验,离上一次相隔少于 5 分钟就返回失败啥的。
clino
312 天前
自己做一个客户端软件,内置的浏览器不让用户能够随意控制
有新版本要让用户必须升级。
Slurp
312 天前
😁 只能用 jsvmp WASM OLLVM 之类的虚拟化和混淆加大逆向难度,想要破解还不是能破。
PerFectTime
312 天前
请求响应数据加密加签,提交的数据使用密文,同时提供根据规则生成的 hash ,后端解密后验证 hash 防止重放
goodname
312 天前
想到一个方法:
课程的学习进度,就后端校验一下本次请求的播放时长和上次请求的播放时长的差是否大于 5 分钟,不满足就拒绝这次学习进度的更新;
课程是否学习完成,就是看后端缓存的学习记录的进度
janus77
312 天前
直接用长连接更新进度,且只允许这一个连接可以更新进度,心跳只为 double check ,这样篡改也只能改这一个连接
pkoukk
312 天前
防君子不防小人,前端发起请求的时候带参数签名,前端 JS 用 webpack 混淆压缩
能挡住 99%的人,起码我看到这么个东西我是懒得去逆向找签名方法的。
icyalala
312 天前
防不了,只能不断增加用户成本,直到大部分人不愿去搞。
Jirajine
312 天前
一句话:枪口抬高一寸,得饶人处且饶人。

@tianxin8431 很奇怪,评论基本都在认真建议,少有质疑需求本身的合法性/道德性的,大概很多人人平常已经习惯做这类需求了吧。

@Ianchen 因为这是那种强制用户使用的产品,和一般平台的需求大为不同。
Nazz
312 天前
对参数进行签名
flyqie
312 天前
wasm 试试?

不过也不可能拦住所有,而且还有浏览器兼容性问题。

还是那句话,得饶人处且饶人,这么玩下去对用户和你都不好。。
nc4697
312 天前
帮家人挂一个网站的视频。
最开始,完全明文,随便刷
后来升级,加密了,但是找到了秘钥,继续刷
现在又升级,加密混淆了,折腾不动了,电脑+人工挂机。。。
angryfish
312 天前
服务器端算时间。每隔一分钟发一次心跳。后台累计。这个过程要注意限制提交频率,防止一下子就刷完了时间。
jack4536251
312 天前
用 websocket ,每隔 5 分钟给前端推送
AyaseEri
312 天前
视频后加一场考试就行了
akira
312 天前
随便弄个加密就可以了,不用怕篡改。 明面上意思一下做到位就行了,别太较真。
Kinnice
312 天前
随机时间跳一个问答,没回答直接 GG
Ianchen
312 天前
@Jirajine 这种需求,那只能在后端想办法了,比如上面有人提到中间随机作业、验证码等。前端不论怎么加密,也只是增加破解难度,几乎不能完全防的住破解。

可以的话,后端计算视频时间,对视频切片,并对切片部分进行权重分配(这个需要视频录制者或者人工来介入,可能比较麻烦一点),前端要求必须请求到所有的切片才能够查看下一个视频,这样也不在乎用户是不是快进还是多倍速学习,除非用户跳跃,跳跃就表示中间可能有一个或多个分片未加载。

处理用户跳跃其实也有个思路:高权重片段不能被忽略加载,否则视为无效学习,至于怎么提示看产品规划。(重新学习或者告知从哪个时间段开始的学习不能跳过)。

至于学习者的学习效果如何?来几个考试就行,我们在学校学习,不也要到某个阶段就来一场考试来判断知识的掌握情况吗?这个方案直接拿来用就行。

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

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

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

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

© 2021 V2EX