[請益] 確保在剛好5分鐘不差作答網頁測驗
我最近在開發一個「線上測驗」的網頁
前端配合後端PHP
線上測驗的系統要剛好在5分鐘讓使用者作答
不能提早交卷也不能遲交
雖然我可以用前端的JavaScript 計時器計時
不過這樣只能防君子不能防小人
不法人士還是可以透過開發者工具偽造請求繞過網頁的計時器
所以這問題勢必要用後端來解決
我起初的想法是在後端開始出題時先用session記錄當時的timestamp
然後之後當伺服器後端接收到任一請求時,檢查收到時的timestamp跟當初session記錄的timestamp相減是否剛好為5分鐘
不過這樣又會有另外一個問題
因為網路傳遞請求一定會有延遲
而每次的延遲時間都不同(也會根據使用者網路情況有所差異)
所以不管前端後端好像都無解?
各位有什麼想法嗎?
--
換個角度思考,有必要到精確到連網路延遲都算進去嗎?
網路延遲千萬別小看 使用者網路狀況如果真的不好,延遲好幾分鐘都是有可能的
設計一個key的演算法 這樣可以避免非合法的送出
請問key演算法避免非合法送出的原理是什麼 是用非對稱加密法在哪裡加密? 因為在前端加密應該沒什麼意義 不法人士只要知道網頁原始碼就可以非法製造假的key和請求
要算網路延遲看NTP的作法,要避免使用者網路問題就是要多個
不同地方的server,然後timestamp要簽章
計時的部分還是需要用js去計
用個心跳包阿 延遲過久就當斷線了
後端紀錄時間是對的,然後時間一到在後端API會檢查
超過時間就不能對考試的任何操作進行動作,前端就看
有沒有動畫或是其他需求要做
網路延遲10分鐘你要算還是不算...
我原本以為是毫秒級的網路延遲,如果是分鐘級的,我想
關注在改善受測者或是系統的環境,會比關注在演算法好
得多吧
如果以台灣的網路環境來看,會延遲到分鐘級,除了受測
者跑去搭大眾運輸然後剛好過山洞沒訊號外,再來就是ISP
瞬斷,那這是要怎麼算XD
比較好奇是什麼類型的測驗跟受眾... 需要這麼來防...
黑客大賽?XD
延遲應該是無解
不能提早交卷是認真的嗎?
測驗差個30秒無所謂
可以用推文有提到的加密
延遲到分鐘級...這個無解吧XD
加密演算法可以加鹽,如果是 5 分鐘就用 300 (秒) 當鹽
把相關參數跟方法放在開發者工具碰不到的地方,
每秒把鹽的參數 +1,送出時資料過個加密到後端,
後端解得出來就表示使用者剛好是在 300 秒時按下送出
是說到底為什麼不能提早交啊...
考試內容包括手速? 要準秒按鈕?
寫 timer 時間到自動點送出算違規嗎? 算的話上面也無效
想請教開發者工具碰不到的地方
應該說是不能 console 直接改, debugger 還是無法
把測驗題目全部放canvas裡面 打上時間戳記錄影起來
五分鐘了不起100~200M吧 ㄎㄎ
驗證請求防止他人偽造的方法
ssr: csrf token with form
spa: csrf token + samesite cookie
將csrf token設為開始時間的雜湊
可防止man in middle 但原po是想再防只本人使用其他行
為(如爬蟲)的操作嗎?
印象中react build過也無法使用開發者工具 把計時模組
包成一個小元件ok吧?
如果是註冊會員腦袋直覺用 socket
在瀏覽器跑的JS基本都抽的出來吧
紅明顯 這是什麼意思 不能提早交也不能遲交?
為什麼我看不懂 這人類辦不到的吧 不懂這目的的意思
有沒有人能夠白話文說明一下這是在幹嘛??
總之就是他要前端不能作弊 後端又能容忍網路延遲幾分鐘
不偏不倚的剛剛好五分鐘
*不偏不倚剛好五分鐘的"網頁操作時間"
我大概知道不能提早交是前端作弊 這部分還能懂
不能遲交是怎樣 我使用者也要在五分鐘的瞬間點送出?
寫完考卷看到計時器 4:59.59的瞬間去按下去就對了==
自動送出吧 XDD 強制交卷
5:00的時候就不允許交卷嗎 這樣誰辦得到 我哪裡搞錯@@
哦哦有道理 靠北喔要講清楚啊 感謝解答媽的想老半天
我是覺得沒啥正常的解法啦 尤其是原po連什麼延遲好幾分鐘
都想考慮進去
然後又要假定使用者取得前端的原始碼
話說如果人家都這麼猛了 你直接給他滿分不行嗎 XDDD
笑死 我只覺得原po表達能力可能要再練一下
不過原PO思考滿縝密的 做網頁想多點應該算是好事?
不過菜雞如我好奇的是偽造繞過計時器 有那麼簡單嗎
這跟跳過廣告是不是類似的東西 有沒有相關資料
剛好在研究request的東西 滿有興趣了解實作這塊的XDD
資料庫記錄比較適合吧,使用者點選開始作答時就記錄
這個使用者針對該項課程測驗開始的時間、預估何時結
束測驗、前端就只算剩幾分鐘,並且使用者的每一項作
答會同步到資料庫內。
這樣好處是使用者瀏覽器掛掉、關掉、連線問題 使用
者應該還可以回到課程平台去找開測驗繼續做
最後不論是否有做完 都還有最後填寫的答案 若一個測
驗有30題,使用者填到第28 題電腦或網路有問題 至少
可以控制風險讓使用者損失最小
若將這種控制存放在session 你作答會被鎖在當下,只
要發生任何意外,例如使用私密瀏覽模式時不小心關掉
,下次開啟時 使用者的 cookie 的 session id 就變
新的,你後端在認的時候就對不上了
考試都有條文規定,糟糕的網路環境後果自負
這是法律問題不是技術問題
而且真正嚴謹的認證考試,是要搭配全程錄影的
不能提早交? 時間到會自動送出的意思嗎
這很老闆思維 需求都說不清楚
請使用者到實體地點作答
工程師想太多不一定是好事,尤其是偏離實際情境太遠,
只是增加了系統複雜度,但只解決了很微小的問題
你可以允許一個延遲最大值 但不可能太大
session可以設置過期 所以不用管前端的timestamp
時間差太多,這連 https 都不能正常運作了唄?
1.機器都辦不到完全精確5分鐘計時。2.如果你預設立場網路
會延遲幾分鐘,那麼這個需求根本不合理。 標準的,需求錯
誤。
拿掉網路會延遲幾分鐘的情況再來討論吧。
照這種邏輯,使用者電腦配備都要考量進去了,不然前端執行
運算時間不同。何必庸人自擾呢。
根本不用抓精確5分鐘,才是現實做法。
這應該是分兩段 前端五分鐘停止作答(可作弊 停用js等
) 所以第二段要在作答時寫入時間,送出測驗後超過五
分的皆為無效測驗 搞那麼複雜幹嘛
socket timeout ? 其實使用者連線不穩,應該就要拒
絕操作了,即
使它超時才提交。到底有什麼應用是連線不穩定還可
以延時正確提交
?難不成他一年後重連也ok?感覺需求設計有點問題
。
我覺得先弄清楚這是什麼等級的考試系統吧,小考還是國考
學校小考根本不用想這麼多防弊,國考指考一定要進考場
這是媲美台北市長線上投票的等級吧
然後網路延遲最多不就tcp timeout嗎,怎麼到幾分鐘的
避免像是某丁那樣 一邊開票一邊投票的選舉無效之術
還是這個系統不允許超時,卻允許tcp無限重傳?
原po的不能遲交 或網路延遲都要考慮進去就合理了(?
原po說網路延遲千萬別小看阿
現實來說應該會有個考試中心跟監考人員,要是真的出
這種網路大掉包,應該是透過例外處理的方法,通知
考試重來之類的
偵測網路延遲過多直接拒絕使用者作答就好
規格需求不夠明確,要回頭討論需求情境跟目的
目前描述下,網路延遲 跟 偽造作弊兩者分不出來
如果需求是:確保公平性。結果你只想著:"保證每個人都精
確做答五分鐘",顯然是弄錯需求了。
網路延遲的單位是ms . 小到不用考慮這因素 .
通常幾分鐘以上都是網路掛掉了! 不是網路延遲.
很神奇的需求 肯定沒辦法簡單解決
但可以從做遊戲的方式思考 用心跳和記錄撰寫進度著手
如果直接把瀏覽器關掉你要怎麼比對 timestamp? 很明顯堅持
要完美比對 timestamp 不是合理做法
不要有交卷按鈕 五分鐘自動交不行嗎
每題作答的時候就送到後端,後端超過五分鐘就不給送
假設request會被fake的話代表你protocol都被破了
這個前提就讓前端涼得差不多了吧 XD
要作真的,一定是看後端,永遠都不要相信前端
而且“測驗”+綁session就表示預設使用期間必須保持連線
狀態 這樣考慮延遲單位到以分鐘計不是很怪?
如果要納入這麼極端狀況的用戶 那5分鐘要求就很突兀啦w
感覺是你把需求跟目標族群弄錯了什麼耶
後端延遲送達你要怎麼確認不是偽造的?
很簡單 加個驗證碼
不過我們這樣回沒什麼用 原po應該要把需求寫詳細點
我也覺得原PO過早於糾結怎麼確認5分鐘 先把需求跟背景弄清
跟相關承辦或是user 再做多一點的情境確認
前端五分整自動送出&跳轉,後端五分七秒後停止接收
剩下的設備與網路問題乾我屁事?
作答前規則就要聲明清楚,請使用者後果自負
確實 自動送出跟檢查一些就沒問題了吧
自動送出可以disable js停止,寫完再啟動送出,說網路延
遲
原 PO 比較像是被公司的 PM 嚇到然後無限糾結五分鐘
這肯定是87pm 又在想一些不可能實現的87需求
先搞清楚需求再來問好不好
又一個經典工程師想太多跟現實需求脫節的案例 你假設網路會
延遲幾分鐘? 那要不要假設電腦會當機? 當然系統排除越多
例外狀況越好 但好的工程師要能在技術成本和效果之間做取捨
絕大部分狀況只需要前端計時就好 確實純前端有有可能被竄
改 但你的測驗情境是面向非專業人士的話 幾乎沒幾個人能辦
到 不然再加上交卷時在後端驗證時間 能應付99.99%的場景
先去跟PM說做不到 然後假裝退一步跟他說先求有再求好
基本上沒有哪個系統用後端計時,又去容忍前端延遲超過幾秒
網路爛你自己家的事,你要不要先確定好這需求真的存在
電競遊戲延遲太長就是斷線,容忍延遲時間長到隔壁的都能跑
來偷看螢幕再回去操作的還有人要比?
還是會有個一咪咪緩衝當臨界啦...卡buffering/IO還是其他
什麼鬼的 都有可能讓邏輯段在處理到的時候超過那麼幾毫秒
不過頂多就給個幾秒吧
網路延遲之外 計時本身也會有誤差
只要不是完全的0誤差 就只能訂一個可接受的範圍
很適合當老闆或客戶或pm,提什麼爛需求
需求聽起來很雞掰
想太多 就算你客制client也一樣會被破解 鑽牛角尖有點笨
直接server計時5分+10秒當緩衝就夠了
頂多幫他幾個動作或每15秒自動儲存一次就夠 別想太美好
推延遲時間長到隔壁都可以偷看XD
前後端都做計時,結束時統一用人工驗證
24
[問卦] 前端、後端、運維 這三個會想學哪一個?聽人家說資訊業比較不看學歷而看實際能力: 如果有機會讓你選擇學習,你會想往哪邊發展? 1.前端工程師: 身為前端工程師,你會從設計師端得到設計稿, 並且運用你的技術把設計轉換為網頁。16
[請益] 如何定義網頁後端104上對於網頁後端工程師的需求普遍是 1. 後端網頁框架 JAVA+springboot / Python+Django 2. 資料庫 MongoDB / SQL / MySQL 3. 雲端服務 Azure / AWS / GCP 很多產品與服務都有提供如網頁的UI介面供操作15
[請益] 後端精進的方向?各位好,我先講一下個人背景 目前是竹科系統廠網通工程師,資歷六年,年薪大概80-90 處理的事情大多就是一般系統廠的系統開發、解bug、主要是寫c 碰的東西通常都是Embedded system相關的軟韌體、通訊溝通的介面等等等 工作內容一部分是網頁前端,前端框架是用Backbone.js,後端CGI就是純PHP,11
Re: [討論] 請大家聊聊 JavaScript的缺陷推 laputaflutin: 同意樓上,不過看到這次美國大選很多新聞網都拿 11/04 21:02 → laputaflutin: svelte來寫,感覺蠻有趣的,應該會拿來試試看 11/04 21:03 禁不住好奇心的我終究還是去看一下 Svelte, 原來它是個反 React、反 Vue、反前端在瀏覽器動態解析樣板的框架兼開發工具。 它讓你在開發時期能夠先以 js 程式碼定義資料,13
[請益] 前端求職作品請益各位好, 小弟是私立中部大學資工系畢業, 至今年三月結束工作,有一年半的程式經驗, 之後碰到疫情,便在家寫題目、惡補專業知識, 目前以自身興趣和求職目的,實做一個看直播的網頁app8
Re: [請益] 如何定義網頁後端┌───┐ │Client│使用者電腦主機, 通常安裝 Browser 瀏覽器 (Firefox, Chrome, Edge, ...) └───┘ │ │6
Re: [請益] 專精前端(或後端)vs全端工程師之前剛好有一份工作是全端,我不知道是否會趨勢化,但全端不一定是一人包前後的案子 事實上那是一份不小的專案,前後端各有數人在開發,甚至客戶 App 也會來串機器 簡單介紹一下那個專案架構 我方開發 web 前端,機器上跑大量 C 的程式,需要把既有 command line 東西視覺化 為了達成雲端操作,所以需要有一個全端來設計 API + SDK