我最近在開發一個「線上測驗」的網頁
前端配合後端PHP
線上測驗的系統要剛好在5分鐘讓使用者作答
不能提早交卷也不能遲交
雖然我可以用前端的JavaScript 計時器計時
不過這樣只能防君子不能防小人
不法人士還是可以透過開發者工具偽造請求繞過網頁的計時器
所以這問題勢必要用後端來解決
我起初的想法是在後端開始出題時先用session記錄當時的timestamp
然後之後當伺服器後端接收到任一請求時,檢查收到時的timestamp跟當初session記錄的
timestamp相減是否剛好為5分鐘
不過這樣又會有另外一個問題
因為網路傳遞請求一定會有延遲
而每次的延遲時間都不同(也會根據使用者網路情況有所差異)
所以不管前端後端好像都無解?
各位有什麼想法嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.25.127 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1674909243.A.7C9.html→ foreverk1樓換個角度思考,有必要到精確到連網路延遲都算進去嗎? 01/28 21:00
網路延遲千萬別小看
使用者網路狀況如果真的不好,延遲好幾分鐘都是有可能的
cspy2樓設計一個key的演算法 這樣可以避免非合法的送出 01/28 21:04
請問key演算法避免非合法送出的原理是什麼
是用非對稱加密法在哪裡加密?
因為在前端加密應該沒什麼意義
不法人士只要知道網頁原始碼就可以非法製造假的key和請求
→ ssccg3樓要算網路延遲看NTP的作法,要避免使用者網路問題就是要多個 01/28 21:05
→ ssccg4樓不同地方的server,然後timestamp要簽章 01/28 21:06
cspy5樓計時的部分還是需要用js去計 01/28 21:10
ko27tye6樓用個心跳包阿 延遲過久就當斷線了 01/28 21:41
WaterLengend7樓後端紀錄時間是對的,然後時間一到在後端API會檢查 01/28 21:46
→ WaterLengend8樓超過時間就不能對考試的任何操作進行動作,前端就看 01/28 21:47
→ WaterLengend9樓有沒有動畫或是其他需求要做 01/28 21:47
s06yji310樓網路延遲10分鐘你要算還是不算... 01/28 21:51
→ foreverk11樓我原本以為是毫秒級的網路延遲,如果是分鐘級的,我想 01/28 21:54
→ foreverk12樓關注在改善受測者或是系統的環境,會比關注在演算法好 01/28 21:54
→ foreverk13樓得多吧 01/28 21:54
→ foreverk14樓如果以台灣的網路環境來看,會延遲到分鐘級,除了受測 01/28 21:57
→ foreverk15樓者跑去搭大眾運輸然後剛好過山洞沒訊號外,再來就是ISP 01/28 21:57
→ foreverk16樓瞬斷,那這是要怎麼算XD 01/28 21:57
→ Hsins17樓比較好奇是什麼類型的測驗跟受眾... 需要這麼來防... 01/28 22:01
final0118樓黑客大賽?XD 01/28 22:08
vi00024619樓延遲應該是無解 01/28 22:09
→ Lomonosov20樓不能提早交卷是認真的嗎? 01/28 22:57
→ GoalBased21樓測驗差個30秒無所謂 01/28 23:00
lovdkkkk22樓可以用推文有提到的加密 01/28 23:16
viper970923樓延遲到分鐘級...這個無解吧XD 01/28 23:16
→ lovdkkkk24樓加密演算法可以加鹽,如果是 5 分鐘就用 300 (秒) 當鹽 01/28 23:16
→ lovdkkkk25樓把相關參數跟方法放在開發者工具碰不到的地方, 01/28 23:16
→ lovdkkkk26樓每秒把鹽的參數 +1,送出時資料過個加密到後端, 01/28 23:17
→ lovdkkkk27樓後端解得出來就表示使用者剛好是在 300 秒時按下送出 01/28 23:17
→ lovdkkkk28樓是說到底為什麼不能提早交啊... 01/28 23:17
→ lovdkkkk29樓考試內容包括手速? 要準秒按鈕? 01/28 23:19
→ lovdkkkk30樓寫 timer 時間到自動點送出算違規嗎? 算的話上面也無效 01/28 23:24