Soft_Job 板


LINE

我最近在开发一个「线上测验」的网页 前端配合後端PHP 线上测验的系统要刚好在5分钟让使用者作答 不能提早交卷也不能迟交 虽然我可以用前端的JavaScript 计时器计时 不过这样只能防君子不能防小人 不法人士还是可以透过开发者工具伪造请求绕过网页的计时器 所以这问题势必要用後端来解决 我起初的想法是在後端开始出题时先用session记录当时的timestamp 然後之後当伺服器後端接收到任一请求时,检查收到时的timestamp跟当初session记录的 timestamp相减是否刚好为5分钟 不过这样又会有另外一个问题 因为网路传递请求一定会有延迟 而每次的延迟时间都不同(也会根据使用者网路情况有所差异) 所以不管前端後端好像都无解? 各位有什麽想法吗? --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.12.25.127 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1674909243.A.7C9.html
1F:→ foreverk: 换个角度思考,有必要到精确到连网路延迟都算进去吗?01/28 21:00
网路延迟千万别小看 使用者网路状况如果真的不好,延迟好几分钟都是有可能的
2F:推 cspy: 设计一个key的演算法 这样可以避免非合法的送出01/28 21:04
请问key演算法避免非合法送出的原理是什麽 是用非对称加密法在哪里加密? 因为在前端加密应该没什麽意义 不法人士只要知道网页原始码就可以非法制造假的key和请求
3F:→ ssccg: 要算网路延迟看NTP的作法,要避免使用者网路问题就是要多个01/28 21:05
4F:→ ssccg: 不同地方的server,然後timestamp要签章01/28 21:06
5F:推 cspy: 计时的部分还是需要用js去计01/28 21:10
※ 编辑: freebug (39.12.25.127 台湾), 01/28/2023 21:23:21
6F:推 ko27tye: 用个心跳包阿 延迟过久就当断线了 01/28 21:41
7F:推 WaterLengend: 後端纪录时间是对的,然後时间一到在後端API会检查 01/28 21:46
8F:→ WaterLengend: 超过时间就不能对考试的任何操作进行动作,前端就看 01/28 21:47
9F:→ WaterLengend: 有没有动画或是其他需求要做 01/28 21:47
10F:推 s06yji3: 网路延迟10分钟你要算还是不算... 01/28 21:51
11F:→ foreverk: 我原本以为是毫秒级的网路延迟,如果是分钟级的,我想 01/28 21:54
12F:→ foreverk: 关注在改善受测者或是系统的环境,会比关注在演算法好 01/28 21:54
13F:→ foreverk: 得多吧 01/28 21:54
14F:→ foreverk: 如果以台湾的网路环境来看,会延迟到分钟级,除了受测 01/28 21:57
15F:→ foreverk: 者跑去搭大众运输然後刚好过山洞没讯号外,再来就是ISP 01/28 21:57
16F:→ foreverk: 瞬断,那这是要怎麽算XD 01/28 21:57
17F:→ Hsins: 比较好奇是什麽类型的测验跟受众... 需要这麽来防... 01/28 22:01
18F:嘘 final01: 黑客大赛?XD 01/28 22:08
19F:推 vi000246: 延迟应该是无解 01/28 22:09
20F:→ Lomonosov: 不能提早交卷是认真的吗? 01/28 22:57
21F:→ GoalBased: 测验差个30秒无所谓 01/28 23:00
22F:推 lovdkkkk: 可以用推文有提到的加密 01/28 23:16
23F:推 viper9709: 延迟到分钟级...这个无解吧XD 01/28 23:16
24F:→ lovdkkkk: 加密演算法可以加盐,如果是 5 分钟就用 300 (秒) 当盐 01/28 23:16
25F:→ lovdkkkk: 把相关参数跟方法放在开发者工具碰不到的地方, 01/28 23:16
26F:→ lovdkkkk: 每秒把盐的参数 +1,送出时资料过个加密到後端, 01/28 23:17
27F:→ lovdkkkk: 後端解得出来就表示使用者刚好是在 300 秒时按下送出 01/28 23:17
28F:→ lovdkkkk: 是说到底为什麽不能提早交啊... 01/28 23:17
29F:→ lovdkkkk: 考试内容包括手速? 要准秒按钮? 01/28 23:19
30F:→ lovdkkkk: 写 timer 时间到自动点送出算违规吗? 算的话上面也无效 01/28 23:24
31F:推 MoonCode: 想请教开发者工具碰不到的地方 01/28 23:29
32F:推 lovdkkkk: 应该说是不能 console 直接改, debugger 还是无法 01/28 23:38
33F:推 kurtsgm: 把测验题目全部放canvas里面 打上时间戳记录影起来 01/28 23:45
34F:→ kurtsgm: 五分钟了不起100~200M吧 ㄎㄎ 01/28 23:49
35F:推 luweber88: 验证请求防止他人伪造的方法 01/29 00:22
36F:→ luweber88: ssr: csrf token with form 01/29 00:22
37F:→ luweber88: spa: csrf token + samesite cookie 01/29 00:22
38F:→ luweber88: 将csrf token设为开始时间的杂凑 01/29 00:22
39F:→ luweber88: 可防止man in middle 但原po是想再防只本人使用其他行 01/29 00:22
40F:→ luweber88: 为(如爬虫)的操作吗? 01/29 00:22
41F:→ luweber88: 印象中react build过也无法使用开发者工具 把计时模组 01/29 00:25
42F:→ luweber88: 包成一个小元件ok吧? 01/29 00:25
43F:推 sp063439: 如果是注册会员脑袋直觉用 socket 01/29 00:28
44F:推 s06yji3: 在浏览器跑的JS基本都抽的出来吧 01/29 01:01
45F:嘘 secretfly: 红明显 这是什麽意思 不能提早交也不能迟交? 01/29 01:03
46F:→ secretfly: 为什麽我看不懂 这人类办不到的吧 不懂这目的的意思 01/29 01:04
47F:→ secretfly: 有没有人能够白话文说明一下这是在干嘛?? 01/29 01:04
48F:→ kurtsgm: 总之就是他要前端不能作弊 後端又能容忍网路延迟几分钟 01/29 01:21
49F:→ kurtsgm: 不偏不倚的刚刚好五分钟 01/29 01:21
50F:→ kurtsgm: *不偏不倚刚好五分钟的"网页操作时间" 01/29 01:22
51F:推 secretfly: 我大概知道不能提早交是前端作弊 这部分还能懂 01/29 01:23
52F:→ secretfly: 不能迟交是怎样 我使用者也要在五分钟的瞬间点送出? 01/29 01:23
53F:→ secretfly: 写完考卷看到计时器 4:59.59的瞬间去按下去就对了== 01/29 01:24
54F:→ kurtsgm: 自动送出吧 XDD 强制交卷 01/29 01:25
55F:→ secretfly: 5:00的时候就不允许交卷吗 这样谁办得到 我哪里搞错@@ 01/29 01:25
56F:→ secretfly: 哦哦有道理 靠北喔要讲清楚啊 感谢解答妈的想老半天 01/29 01:26
57F:→ kurtsgm: 我是觉得没啥正常的解法啦 尤其是原po连什麽延迟好几分钟 01/29 01:27
58F:→ kurtsgm: 都想考虑进去 01/29 01:27
59F:→ kurtsgm: 然後又要假定使用者取得前端的原始码 01/29 01:28
60F:→ kurtsgm: 话说如果人家都这麽猛了 你直接给他满分不行吗 XDDD 01/29 01:29
61F:→ secretfly: 笑死 我只觉得原po表达能力可能要再练一下 01/29 01:29
62F:推 secretfly: 不过原PO思考满缜密的 做网页想多点应该算是好事? 01/29 01:57
63F:→ secretfly: 不过菜鸡如我好奇的是伪造绕过计时器 有那麽简单吗 01/29 01:57
64F:→ secretfly: 这跟跳过广告是不是类似的东西 有没有相关资料 01/29 01:58
65F:→ secretfly: 刚好在研究request的东西 满有兴趣了解实作这块的XDD 01/29 01:59
66F:→ guanting886: 资料库记录比较适合吧,使用者点选开始作答时就记录 01/29 03:00
67F:→ guanting886: 这个使用者针对该项课程测验开始的时间、预估何时结 01/29 03:00
68F:→ guanting886: 束测验、前端就只算剩几分钟,并且使用者的每一项作 01/29 03:00
69F:→ guanting886: 答会同步到资料库内。 01/29 03:00
70F:→ guanting886: 这样好处是使用者浏览器挂掉、关掉、连线问题 使用 01/29 03:01
71F:→ guanting886: 者应该还可以回到课程平台去找开测验继续做 01/29 03:01
72F:推 guanting886: 最後不论是否有做完 都还有最後填写的答案 若一个测 01/29 03:06
73F:→ guanting886: 验有30题,使用者填到第28 题电脑或网路有问题 至少 01/29 03:06
74F:→ guanting886: 可以控制风险让使用者损失最小 01/29 03:06
75F:→ guanting886: 若将这种控制存放在session 你作答会被锁在当下,只 01/29 03:08
76F:→ guanting886: 要发生任何意外,例如使用私密浏览模式时不小心关掉 01/29 03:08
77F:→ guanting886: ,下次开启时 使用者的 cookie 的 session id 就变 01/29 03:08
78F:→ guanting886: 新的,你後端在认的时候就对不上了 01/29 03:08
79F:推 luke72: 考试都有条文规定,糟糕的网路环境後果自负 01/29 03:59
80F:→ luke72: 这是法律问题不是技术问题 01/29 04:00
81F:推 luke72: 而且真正严谨的认证考试,是要搭配全程录影的 01/29 04:01
82F:推 RINPE: 不能提早交? 时间到会自动送出的意思吗 01/29 07:29
83F:推 k798976869: 这很老板思维 需求都说不清楚 01/29 08:20
84F:→ nh60211as: 请使用者到实体地点作答 01/29 08:53
85F:→ foreverk: 工程师想太多不一定是好事,尤其是偏离实际情境太远, 01/29 09:01
86F:→ foreverk: 只是增加了系统复杂度,但只解决了很微小的问题 01/29 09:01
87F:推 gofigure: 你可以允许一个延迟最大值 但不可能太大 01/29 13:56
88F:推 gofigure: session可以设置过期 所以不用管前端的timestamp 01/29 14:13
89F:→ qrtt1: 时间差太多,这连 https 都不能正常运作了呗? 01/29 14:56
90F:嘘 DrTech: 1.机器都办不到完全精确5分钟计时。2.如果你预设立场网路 01/29 15:22
91F:→ DrTech: 会延迟几分钟,那麽这个需求根本不合理。 标准的,需求错 01/29 15:22
92F:→ DrTech: 误。 01/29 15:22
93F:→ DrTech: 拿掉网路会延迟几分钟的情况再来讨论吧。 01/29 15:25
94F:→ DrTech: 照这种逻辑,使用者电脑配备都要考量进去了,不然前端执行 01/29 15:34
95F:→ DrTech: 运算时间不同。何必庸人自扰呢。 01/29 15:34
96F:→ DrTech: 根本不用抓精确5分钟,才是现实做法。 01/29 15:34
97F:→ airtsubasa: 这应该是分两段 前端五分钟停止作答(可作弊 停用js等 01/29 17:26
98F:→ airtsubasa: ) 所以第二段要在作答时写入时间,送出测验後超过五 01/29 17:26
99F:→ airtsubasa: 分的皆为无效测验 搞那麽复杂干嘛 01/29 17:26
100F:推 OnlyRD: socket timeout ? 其实使用者连线不稳,应该就要拒 01/29 18:27
101F:→ OnlyRD: 绝操作了,即 01/29 18:27
102F:→ OnlyRD: 使它超时才提交。到底有什麽应用是连线不稳定还可 01/29 18:27
103F:→ OnlyRD: 以延时正确提交 01/29 18:27
104F:→ OnlyRD: ?难不成他一年後重连也ok?感觉需求设计有点问题 01/29 18:27
105F:→ OnlyRD: 。 01/29 18:27
106F:推 luke72: 我觉得先弄清楚这是什麽等级的考试系统吧,小考还是国考 01/29 19:02
107F:推 luke72: 学校小考根本不用想这麽多防弊,国考指考一定要进考场 01/29 19:03
108F:推 secretfly: 这是媲美台北市长线上投票的等级吧 01/29 19:04
109F:→ luke72: 然後网路延迟最多不就tcp timeout吗,怎麽到几分钟的 01/29 19:04
110F:→ secretfly: 避免像是某丁那样 一边开票一边投票的选举无效之术 01/29 19:05
111F:→ luke72: 还是这个系统不允许超时,却允许tcp无限重传? 01/29 19:05
112F:→ secretfly: 原po的不能迟交 或网路延迟都要考虑进去就合理了(? 01/29 19:05
113F:推 luke72: 原po说网路延迟千万别小看阿 01/29 19:08
114F:推 WaterLengend: 现实来说应该会有个考试中心跟监考人员,要是真的出 01/29 19:12
115F:→ WaterLengend: 这种网路大掉包,应该是透过例外处理的方法,通知 01/29 19:12
116F:→ WaterLengend: 考试重来之类的 01/29 19:12
117F:推 gmoz: 侦测网路延迟过多直接拒绝使用者作答就好 01/29 19:50
118F:推 wt: 规格需求不够明确,要回头讨论需求情境跟目的 01/29 20:15
119F:→ wt: 目前描述下,网路延迟 跟 伪造作弊两者分不出来 01/29 20:16
120F:→ DrTech: 如果需求是:确保公平性。结果你只想着:"保证每个人都精 01/29 21:03
121F:→ DrTech: 确做答五分钟",显然是弄错需求了。 01/29 21:03
122F:嘘 OSDBNetwork: 网路延迟的单位是ms . 小到不用考虑这因素 . 01/29 21:45
123F:→ OSDBNetwork: https://reurl.cc/KXm00m 01/29 21:46
124F:→ OSDBNetwork: 通常几分钟以上都是网路挂掉了! 不是网路延迟. 01/29 21:47
125F:→ superpandal: 很神奇的需求 肯定没办法简单解决 01/29 23:49
126F:→ superpandal: 但可以从做游戏的方式思考 用心跳和记录撰写进度着手 01/29 23:49
127F:→ c8dog: 如果直接把浏览器关掉你要怎麽比对 timestamp? 很明显坚持 01/30 01:05
128F:→ c8dog: 要完美比对 timestamp 不是合理做法 01/30 01:05
129F:推 endless1999: 不要有交卷按钮 五分钟自动交不行吗 01/30 02:00
130F:→ Phenomenon: 每题作答的时候就送到後端,後端超过五分钟就不给送 01/30 09:18
131F:→ Ekmund: 假设request会被fake的话代表你protocol都被破了 01/30 10:30
132F:→ Ekmund: 这个前提就让前端凉得差不多了吧 XD 01/30 10:31
133F:→ knives: 要作真的,一定是看後端,永远都不要相信前端 01/30 10:34
134F:→ Ekmund: 而且“测验”+绑session就表示预设使用期间必须保持连线 01/30 10:37
135F:→ Ekmund: 状态 这样考虑延迟单位到以分钟计不是很怪? 01/30 10:37
136F:→ Ekmund: 如果要纳入这麽极端状况的用户 那5分钟要求就很突兀啦w 01/30 10:38
137F:→ Ekmund: 感觉是你把需求跟目标族群弄错了什麽耶 01/30 10:40
138F:推 shring: 後端延迟送达你要怎麽确认不是伪造的? 01/30 10:53
139F:推 vi000246: 很简单 加个验证码 01/30 12:15
140F:→ vi000246: 不过我们这样回没什麽用 原po应该要把需求写详细点 01/30 12:15
141F:推 gmoz: 我也觉得原PO过早於纠结怎麽确认5分钟 先把需求跟背景弄清 01/30 14:18
142F:→ gmoz: 跟相关承办或是user 再做多一点的情境确认 01/30 14:18
143F:嘘 MyNion: 前端五分整自动送出&跳转,後端五分七秒後停止接收 01/30 15:20
144F:→ MyNion: 剩下的设备与网路问题乾我屁事? 01/30 15:20
145F:→ MyNion: 作答前规则就要声明清楚,请使用者後果自负 01/30 15:20
146F:推 sniper2824: 确实 自动送出跟检查一些就没问题了吧 01/30 17:18
147F:推 luke72: 自动送出可以disable js停止,写完再启动送出,说网路延 01/30 18:27
148F:→ luke72: 迟 01/30 18:27
149F:→ c8dog: 原 PO 比较像是被公司的 PM 吓到然後无限纠结五分钟 01/31 02:04
150F:→ knives: 这肯定是87pm 又在想一些不可能实现的87需求 01/31 06:34
151F:嘘 gtjs45: 先搞清楚需求再来问好不好 01/31 08:03
152F:嘘 needy: 又一个经典工程师想太多跟现实需求脱节的案例 你假设网路会 01/31 08:44
153F:→ needy: 延迟几分钟? 那要不要假设电脑会当机? 当然系统排除越多 01/31 08:44
154F:→ needy: 例外状况越好 但好的工程师要能在技术成本和效果之间做取舍 01/31 08:44
155F:→ needy: 绝大部分状况只需要前端计时就好 确实纯前端有有可能被窜 01/31 08:44
156F:→ needy: 改 但你的测验情境是面向非专业人士的话 几乎没几个人能办 01/31 08:44
157F:→ needy: 到 不然再加上交卷时在後端验证时间 能应付99.99%的场景 01/31 08:44
158F:推 gmoz: 先去跟PM说做不到 然後假装退一步跟他说先求有再求好 01/31 10:22
159F:→ ssccg: 基本上没有哪个系统用後端计时,又去容忍前端延迟超过几秒 01/31 12:50
160F:→ ssccg: 网路烂你自己家的事,你要不要先确定好这需求真的存在 01/31 12:50
161F:→ ssccg: 电竞游戏延迟太长就是断线,容忍延迟时间长到隔壁的都能跑 01/31 12:53
162F:→ ssccg: 来偷看萤幕再回去操作的还有人要比? 01/31 12:57
163F:→ Ekmund: 还是会有个一咪咪缓冲当临界啦...卡buffering/IO还是其他 01/31 14:43
164F:→ Ekmund: 什麽鬼的 都有可能让逻辑段在处理到的时候超过那麽几毫秒 01/31 14:43
165F:→ Ekmund: 不过顶多就给个几秒吧 01/31 14:44
166F:推 InfinitySA: 网路延迟之外 计时本身也会有误差 01/31 15:21
167F:→ InfinitySA: 只要不是完全的0误差 就只能订一个可接受的范围 01/31 15:22
168F:嘘 wateryc: 很适合当老板或客户或pm,提什麽烂需求 01/31 15:26
169F:嘘 stellvia2359: 需求听起来很鸡掰 01/31 16:26
170F:→ alan3100: 想太多 就算你客制client也一样会被破解 钻牛角尖有点笨 01/31 18:28
171F:→ alan3100: 直接server计时5分+10秒当缓冲就够了 01/31 18:31
172F:→ alan3100: 顶多帮他几个动作或每15秒自动储存一次就够 别想太美好 01/31 18:32
173F:→ viper9709: 推延迟时间长到隔壁都可以偷看XD 02/01 00:14
174F:推 imgodd: 前後端都做计时,结束时统一用人工验证 02/01 05:45
175F:→ honestyer: 要是他五分钟内就破解你的东西了 你还不给他过吗?? 02/01 14:35
176F:→ wheateardoll: 这麽奇怪的要求,搞不好是政府的案子? 02/02 08:01
177F:推 ZincAllure: 不能提早不能迟交是什麽意思 要刚好5分钟的那一秒交吗 02/02 11:17
178F:推 roy2142: 是什麽情境网路会延迟到好几分钟 03/07 01:05







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP