Soft_Job 板


LINE

我最近在開發一個「線上測驗」的網頁 前端配合後端PHP 線上測驗的系統要剛好在5分鐘讓使用者作答 不能提早交卷也不能遲交 雖然我可以用前端的JavaScript 計時器計時 不過這樣只能防君子不能防小人 不法人士還是可以透過開發者工具偽造請求繞過網頁的計時器 所以這問題勢必要用後端來解決 我起初的想法是在後端開始出題時先用session記錄當時的timestamp 然後之後當伺服器後端接收到任一請求時,檢查收到時的timestamp跟當初session記錄的 timestamp相減是否剛好為5分鐘 不過這樣又會有另外一個問題 因為網路傳遞請求一定會有延遲 而每次的延遲時間都不同(也會根據使用者網路情況有所差異) 所以不管前端後端好像都無解? 各位有什麼想法嗎? --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.25.127 (臺灣)
※ 文章網址: https://webptt.com/m.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燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP