[請益] 確保在剛好5分鐘不差作答網頁測驗

作者: freebug (Freebug)   2023-01-28 20:34:01
我最近在開發一個「線上測驗」的網頁
前端配合後端PHP
線上測驗的系統要剛好在5分鐘讓使用者作答
不能提早交卷也不能遲交
雖然我可以用前端的JavaScript 計時器計時
不過這樣只能防君子不能防小人
不法人士還是可以透過開發者工具偽造請求繞過網頁的計時器
所以這問題勢必要用後端來解決
我起初的想法是在後端開始出題時先用session記錄當時的timestamp
然後之後當伺服器後端接收到任一請求時,檢查收到時的timestamp跟當初session記錄的
timestamp相減是否剛好為5分鐘
不過這樣又會有另外一個問題
因為網路傳遞請求一定會有延遲
而每次的延遲時間都不同(也會根據使用者網路情況有所差異)
所以不管前端後端好像都無解?
各位有什麼想法嗎?
作者: foreverk (文藝青年)   2023-01-28 21:00:00
換個角度思考,有必要到精確到連網路延遲都算進去嗎?
作者: cspy (Perfect Stranger)   2023-01-28 21:04:00
設計一個key的演算法 這樣可以避免非合法的送出
作者: ssccg (23)   2023-01-28 21:05:00
要算網路延遲看NTP的作法,要避免使用者網路問題就是要多個不同地方的server,然後timestamp要簽章
作者: cspy (Perfect Stranger)   2023-01-28 21:10:00
計時的部分還是需要用js去計
作者: ko27tye (好滋好滋)   2023-01-28 21:41:00
用個心跳包阿 延遲過久就當斷線了
作者: WaterLengend (Leeeeeeeeooooooo)   2023-01-28 21:46:00
後端紀錄時間是對的,然後時間一到在後端API會檢查超過時間就不能對考試的任何操作進行動作,前端就看有沒有動畫或是其他需求要做
作者: s06yji3 (阿南)   2023-01-28 21:51:00
網路延遲10分鐘你要算還是不算...
作者: foreverk (文藝青年)   2023-01-28 21:54:00
我原本以為是毫秒級的網路延遲,如果是分鐘級的,我想關注在改善受測者或是系統的環境,會比關注在演算法好得多吧如果以台灣的網路環境來看,會延遲到分鐘級,除了受測者跑去搭大眾運輸然後剛好過山洞沒訊號外,再來就是ISP瞬斷,那這是要怎麼算XD
作者: Hsins (翔)   2023-01-28 22:01:00
比較好奇是什麼類型的測驗跟受眾... 需要這麼來防...
作者: final01 (牛頓運動定律)   2023-01-28 22:08:00
黑客大賽?XD
作者: vi000246 (Vi)   2023-01-28 22:09:00
延遲應該是無解
作者: Lomonosov (羅蒙諾索夫院士)   2023-01-28 22:57:00
不能提早交卷是認真的嗎?
作者: GoalBased (Artificail Intelligence)   2023-01-28 23:00:00
測驗差個30秒無所謂
作者: lovdkkkk (dk)   2023-01-28 23:16:00
可以用推文有提到的加密
作者: viper9709 (阿達)   2023-01-28 23:16:00
延遲到分鐘級...這個無解吧XD
作者: MoonCode (MoonCode)   2023-01-28 23:29:00
想請教開發者工具碰不到的地方
作者: lovdkkkk (dk)   2023-01-28 23:38:00
應該說是不能 console 直接改, debugger 還是無法
作者: kurtsgm   2023-01-28 23:45:00
把測驗題目全部放canvas裡面 打上時間戳記錄影起來五分鐘了不起100~200M吧 ㄎㄎ
作者: luweber88 (貓咪)   2023-01-29 00:22:00
驗證請求防止他人偽造的方法ssr: csrf token with formspa: csrf token + samesite cookie將csrf token設為開始時間的雜湊可防止man in middle 但原po是想再防只本人使用其他行為(如爬蟲)的操作嗎?印象中react build過也無法使用開發者工具 把計時模組包成一個小元件ok吧?
作者: sp063439 (Isk)   2023-01-29 00:28:00
如果是註冊會員腦袋直覺用 socket
作者: s06yji3 (阿南)   2023-01-29 01:01:00
在瀏覽器跑的JS基本都抽的出來吧
作者: secretfly (☠鬼滅·之喵喵)   2023-01-29 01:03:00
紅明顯 這是什麼意思 不能提早交也不能遲交?為什麼我看不懂 這人類辦不到的吧 不懂這目的的意思有沒有人能夠白話文說明一下這是在幹嘛??
作者: kurtsgm   2023-01-29 01:21:00
總之就是他要前端不能作弊 後端又能容忍網路延遲幾分鐘不偏不倚的剛剛好五分鐘*不偏不倚剛好五分鐘的"網頁操作時間"
作者: secretfly (☠鬼滅·之喵喵)   2023-01-29 01:23:00
我大概知道不能提早交是前端作弊 這部分還能懂不能遲交是怎樣 我使用者也要在五分鐘的瞬間點送出?寫完考卷看到計時器 4:59.59的瞬間去按下去就對了==
作者: kurtsgm   2023-01-29 01:25:00
自動送出吧 XDD 強制交卷
作者: secretfly (☠鬼滅·之喵喵)   2023-01-29 01:25:00
5:00的時候就不允許交卷嗎 這樣誰辦得到 我哪裡搞錯@@哦哦有道理 靠北喔要講清楚啊 感謝解答媽的想老半天
作者: kurtsgm   2023-01-29 01:27:00
我是覺得沒啥正常的解法啦 尤其是原po連什麼延遲好幾分鐘都想考慮進去然後又要假定使用者取得前端的原始碼話說如果人家都這麼猛了 你直接給他滿分不行嗎 XDDD
作者: secretfly (☠鬼滅·之喵喵)   2023-01-29 01:29:00
笑死 我只覺得原po表達能力可能要再練一下不過原PO思考滿縝密的 做網頁想多點應該算是好事?不過菜雞如我好奇的是偽造繞過計時器 有那麼簡單嗎這跟跳過廣告是不是類似的東西 有沒有相關資料剛好在研究request的東西 滿有興趣了解實作這塊的XDD
作者: guanting886 (Guanting)   2023-01-29 03:00:00
資料庫記錄比較適合吧,使用者點選開始作答時就記錄這個使用者針對該項課程測驗開始的時間、預估何時結束測驗、前端就只算剩幾分鐘,並且使用者的每一項作答會同步到資料庫內。這樣好處是使用者瀏覽器掛掉、關掉、連線問題 使用者應該還可以回到課程平台去找開測驗繼續做最後不論是否有做完 都還有最後填寫的答案 若一個測驗有30題,使用者填到第28 題電腦或網路有問題 至少可以控制風險讓使用者損失最小若將這種控制存放在session 你作答會被鎖在當下,只要發生任何意外,例如使用私密瀏覽模式時不小心關掉,下次開啟時 使用者的 cookie 的 session id 就變新的,你後端在認的時候就對不上了
作者: luke72 (ccc)   2023-01-29 03:59:00
考試都有條文規定,糟糕的網路環境後果自負這是法律問題不是技術問題而且真正嚴謹的認證考試,是要搭配全程錄影的
作者: RINPE (RIN)   2023-01-29 07:29:00
不能提早交? 時間到會自動送出的意思嗎
作者: k798976869 (kk)   2023-01-29 08:20:00
這很老闆思維 需求都說不清楚
作者: nh60211as   2023-01-29 08:53:00
請使用者到實體地點作答
作者: foreverk (文藝青年)   2023-01-29 09:01:00
工程師想太多不一定是好事,尤其是偏離實際情境太遠,只是增加了系統複雜度,但只解決了很微小的問題
作者: gofigure (平行世界)   2023-01-29 13:56:00
你可以允許一個延遲最大值 但不可能太大session可以設置過期 所以不用管前端的timestamp
作者: qrtt1 (有些事,有時候。。。)   2023-01-29 14:56:00
時間差太多,這連 https 都不能正常運作了唄?
作者: DrTech (竹科管理處網軍研發人員)   2023-01-29 15:22:00
1.機器都辦不到完全精確5分鐘計時。2.如果你預設立場網路會延遲幾分鐘,那麼這個需求根本不合理。 標準的,需求錯誤。拿掉網路會延遲幾分鐘的情況再來討論吧。照這種邏輯,使用者電腦配備都要考量進去了,不然前端執行運算時間不同。何必庸人自擾呢。根本不用抓精確5分鐘,才是現實做法。
作者: airtsubasa (偽學姊)   2023-01-29 17:26:00
這應該是分兩段 前端五分鐘停止作答(可作弊 停用js等) 所以第二段要在作答時寫入時間,送出測驗後超過五分的皆為無效測驗 搞那麼複雜幹嘛
作者: OnlyRD (里巷人)   2023-01-29 18:27:00
socket timeout ? 其實使用者連線不穩,應該就要拒絕操作了,即使它超時才提交。到底有什麼應用是連線不穩定還可以延時正確提交?難不成他一年後重連也ok?感覺需求設計有點問題。
作者: luke72 (ccc)   2023-01-29 19:02:00
我覺得先弄清楚這是什麼等級的考試系統吧,小考還是國考學校小考根本不用想這麼多防弊,國考指考一定要進考場
作者: secretfly (☠鬼滅·之喵喵)   2023-01-29 19:04:00
這是媲美台北市長線上投票的等級吧
作者: luke72 (ccc)   2023-01-29 19:04:00
然後網路延遲最多不就tcp timeout嗎,怎麼到幾分鐘的
作者: secretfly (☠鬼滅·之喵喵)   2023-01-29 19:05:00
避免像是某丁那樣 一邊開票一邊投票的選舉無效之術
作者: luke72 (ccc)   2023-01-29 19:05:00
還是這個系統不允許超時,卻允許tcp無限重傳?
作者: luke72 (ccc)   2023-01-29 19:08:00
原po說網路延遲千萬別小看阿
作者: WaterLengend (Leeeeeeeeooooooo)   2023-01-29 19:12:00
現實來說應該會有個考試中心跟監考人員,要是真的出這種網路大掉包,應該是透過例外處理的方法,通知考試重來之類的
作者: gmoz ( This can't do that. )   2023-01-29 19:50:00
偵測網路延遲過多直接拒絕使用者作答就好
作者: wt (Time to Change!)   2023-01-29 20:15:00
規格需求不夠明確,要回頭討論需求情境跟目的目前描述下,網路延遲 跟 偽造作弊兩者分不出來
作者: DrTech (竹科管理處網軍研發人員)   2023-01-29 21:03:00
如果需求是:確保公平性。結果你只想著:"保證每個人都精確做答五分鐘",顯然是弄錯需求了。
作者: OSDBNetwork (路人甲)   2023-01-29 21:45:00
網路延遲的單位是ms . 小到不用考慮這因素 .https://reurl.cc/KXm00m通常幾分鐘以上都是網路掛掉了! 不是網路延遲.
作者: superpandal   2023-01-29 23:49:00
很神奇的需求 肯定沒辦法簡單解決但可以從做遊戲的方式思考 用心跳和記錄撰寫進度著手
作者: c8dog (草莓豬烏梅豬百香狗)   2023-01-30 01:05:00
如果直接把瀏覽器關掉你要怎麼比對 timestamp? 很明顯堅持要完美比對 timestamp 不是合理做法
作者: endless1999 (jubee)   2023-01-30 02:00:00
不要有交卷按鈕 五分鐘自動交不行嗎
作者: Phenomenon (Kuma)   2023-01-30 09:18:00
每題作答的時候就送到後端,後端超過五分鐘就不給送
作者: Ekmund (是一隻小叔)   2023-01-30 10:30:00
假設request會被fake的話代表你protocol都被破了這個前提就讓前端涼得差不多了吧 XD
作者: knives   2023-01-30 10:34:00
要作真的,一定是看後端,永遠都不要相信前端
作者: Ekmund (是一隻小叔)   2023-01-30 10:37:00
而且“測驗”+綁session就表示預設使用期間必須保持連線狀態 這樣考慮延遲單位到以分鐘計不是很怪?如果要納入這麼極端狀況的用戶 那5分鐘要求就很突兀啦w感覺是你把需求跟目標族群弄錯了什麼耶
作者: shring (洽卡洽卡啪打碰)   2023-01-30 10:53:00
後端延遲送達你要怎麼確認不是偽造的?
作者: vi000246 (Vi)   2023-01-30 12:15:00
很簡單 加個驗證碼不過我們這樣回沒什麼用 原po應該要把需求寫詳細點
作者: gmoz ( This can't do that. )   2023-01-30 14:18:00
我也覺得原PO過早於糾結怎麼確認5分鐘 先把需求跟背景弄清跟相關承辦或是user 再做多一點的情境確認
作者: MyNion (Nion Lee)   2023-01-30 15:20:00
前端五分整自動送出&跳轉,後端五分七秒後停止接收剩下的設備與網路問題乾我屁事?作答前規則就要聲明清楚,請使用者後果自負
作者: sniper2824 (月夜)   2023-01-30 17:18:00
確實 自動送出跟檢查一些就沒問題了吧
作者: luke72 (ccc)   2023-01-30 18:27:00
自動送出可以disable js停止,寫完再啟動送出,說網路延遲
作者: c8dog (草莓豬烏梅豬百香狗)   2023-01-31 02:04:00
原 PO 比較像是被公司的 PM 嚇到然後無限糾結五分鐘
作者: knives   2023-01-31 06:34:00
這肯定是87pm 又在想一些不可能實現的87需求
作者: gtjs45 (JK)   2023-01-31 08:03:00
先搞清楚需求再來問好不好
作者: needy (needy)   2023-01-31 08:44:00
又一個經典工程師想太多跟現實需求脫節的案例 你假設網路會延遲幾分鐘? 那要不要假設電腦會當機? 當然系統排除越多例外狀況越好 但好的工程師要能在技術成本和效果之間做取捨絕大部分狀況只需要前端計時就好 確實純前端有有可能被竄改 但你的測驗情境是面向非專業人士的話 幾乎沒幾個人能辦到 不然再加上交卷時在後端驗證時間 能應付99.99%的場景
作者: gmoz ( This can't do that. )   2023-01-31 10:22:00
先去跟PM說做不到 然後假裝退一步跟他說先求有再求好
作者: ssccg (23)   2023-01-31 12:50:00
基本上沒有哪個系統用後端計時,又去容忍前端延遲超過幾秒網路爛你自己家的事,你要不要先確定好這需求真的存在電競遊戲延遲太長就是斷線,容忍延遲時間長到隔壁的都能跑來偷看螢幕再回去操作的還有人要比?
作者: Ekmund (是一隻小叔)   2023-01-31 14:43:00
還是會有個一咪咪緩衝當臨界啦...卡buffering/IO還是其他什麼鬼的 都有可能讓邏輯段在處理到的時候超過那麼幾毫秒不過頂多就給個幾秒吧
作者: InfinitySA (~我肥宅我有妹妹~)   2023-01-31 15:21:00
網路延遲之外 計時本身也會有誤差只要不是完全的0誤差 就只能訂一個可接受的範圍
作者: wateryc (歪C)   2023-01-31 15:26:00
很適合當老闆或客戶或pm,提什麼爛需求
作者: stellvia2359 (Astral)   2023-01-31 16:26:00
需求聽起來很雞掰
作者: alan3100 (BOSS)   2023-01-31 18:28:00
想太多 就算你客制client也一樣會被破解 鑽牛角尖有點笨直接server計時5分+10秒當緩衝就夠了頂多幫他幾個動作或每15秒自動儲存一次就夠 別想太美好
作者: viper9709 (阿達)   2023-02-01 00:14:00
推延遲時間長到隔壁都可以偷看XD
作者: imgodd (新手請指教)   2023-02-01 05:45:00
前後端都做計時,結束時統一用人工驗證
作者: honestyer (誠實可靠小郎君)   2023-02-01 14:35:00
要是他五分鐘內就破解你的東西了 你還不給他過嗎??
作者: wheateardoll (半分妝成雪霜天)   2023-02-02 08:01:00
這麼奇怪的要求,搞不好是政府的案子?
作者: ZincAllure   2023-02-02 11:17:00
不能提早不能遲交是什麼意思 要剛好5分鐘的那一秒交嗎

Links booklink

Contact Us: admin [ a t ] ucptt.com