我正在為一個考試網站創建一個 JS 計數器,我發現他們可以通過運行很容易地在控制臺中添加額外的時間sec = 10000,我該如何阻止它。
我在后端使用 laravel
runCounter();
function runCounter() {
let min = 45;
let sec = min * 60;
let x = setInterval(function() {
console.log(secFormat(sec))
sec -= 1;
if (sec <= 0) {
endExam();
clearInterval(x);
}
}, 1000);
}
function secFormat(x) {
x = Number(x);
let h = Math.floor(x / 3600);
let m = Math.floor(x % 3600 / 60);
let s = Math.floor(x % 3600 % 60);
m = h * 60;
if (m < 10) {
m = "0" m
}
if (s < 10) {
s = "0" s
}
return m ":" s;
}
function endExam() {
alert('exma ended');
}
uj5u.com熱心網友回復:
將您的功能置于自執行功能中,如下所示
(function runCounter() {
let min = 45;
let sec = min * 60;
let x = setInterval(function() {
console.log(secFormat(sec))
sec -= 1;
if (sec <= 0) {
endExam();
clearInterval(x);
} }, 1000); }
)();
所以它的變數對外部環境來說是私有的,即控制臺
uj5u.com熱心網友回復:
很簡單:在你的 Laravel 專案中,你存盤用戶開始考試的時間,然后創建一個定期運行的 cron 作業并檢查是否有任何考試的時間已經過去。如果是這樣,則將該考試視為失敗,因為用戶未能及時發送答案。
您無需擔心用戶如何更改 JS 代碼,因為如果服務器知道考試何時開始,那么學生或瀏覽器聲稱的內容無關緊要。
您的主要問題是您的網站假定用戶的瀏覽器具有準確的資訊。但是用戶可以隨意更改 JS 代碼。
您可以通過在所有 Javascript 周圍包裝一個函式來使用戶更難使用,例如
function() {
//your JS code
}();
在這種情況下,至少您的函式不會在全域背景關系中。但這也可以被黑客入侵。
讓我解釋一下為什么你不能以任何方式阻止這種情況發生:
- 可以創建一個與您網站上的 HTML、JS 相同的小專案
- 添加將用作代理的本地服務器
- 用戶的時間將只是一個常數
更簡單:用戶可以簡單地在 Javascript 代碼中的某處放置斷點,同時他/她考慮解決方案,然后他/她的時間永遠不會過去。
永遠不要相信用戶資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/412346.html
標籤:
上一篇:如果使用佇列作業Laravel將影像發送到電子郵件,影像不會出現在刀片頁面中?
下一篇:未知列使用Laravel時
