我目前正在制作一個回答問題的網站,但我遇到了問題。即,例如在回答第二個問題時,但用戶想回到上一個問題編輯答案,有2種方式:
- 使用瀏覽器的撤銷按鈕
- 更改網址
例如:
/question?id=2更改為/question?id=1
網路將重新加載上一個問題,他們可以更改答案 使用方法#1,我已阻止,但如果用戶更改了 url,現在我不知道如何阻止?我想問你的解決方案,我用的是js,如果vue3 ts就更好了
uj5u.com熱心網友回復:
如果您想阻止用戶輸入問題 #1 的新答案,那么您需要在服務器上保留一些狀態。維護一個問題清單,跟蹤哪些已經回答,哪些沒有。您請求時提供的頁面question?id=1和服務器狀態是這樣的,即用戶已經回答了問題 #1 應該是顯示錯誤或只是強制它轉到第一個未回答的問題的頁面,通過重定向或僅呈現問題2或合理的東西。但最重要的是服務器需要狀態。
這就像,如果我去我的銀行頁面并在我的瀏覽器中編輯我的余額以在我的銀行賬戶余額的末尾添加更多的 000,它實際上不會改變我銀行中的金額,只是什么本地顯示。要實際更改銀行余額,我必須向服務器發出請求,導致我的余額發生更改。
對你來說也是一樣。如果您不想接受已提交問題的新答案,那么您將知道頁面何時嘗試提交答案。該頁面可能會使用用戶對問題 1 的回答進行 POST,并且服務器將回答保留在某處。如果瀏覽器執行另一個 POST 并回答同一問題(因為用戶破解了 URL),您可以簡單地拒絕請求并拒絕更改服務器狀態,回傳某種錯誤,例如“您已經回答了那個問題”。
您在此事件中為用戶提供的體驗并不重要(他們在進行黑客攻擊),但為了做一些合理的事情,請考慮將瀏覽器重定向到正確的問題。下一個未回答的問題可能是對“您已經回答了那個問題”的 REST 回應的一部分。
uj5u.com熱心網友回復:
無法阻止用戶更改 URL。
uj5u.com熱心網友回復:
直接阻止修改頂級 URL 是不可能的,但是,您可以采用其他幾種解決方案。如果您使用的是 Vue Router,則可以使用導航守衛并在檢測到無效更改時重定向回來。否則,對于更傳統的解決方案,您可以將 URL 隱藏在iframe 內,其 URL 將無法從導航欄訪問。示例 HTML:
<iframe src="/question?id=2"></iframe>
請記住,可以繞過任何客戶端安全性,最好將敏感資料存盤在服務器上。對于 iframe,了解開發人員工具的人修改其中的 URL 將是微不足道的。
uj5u.com熱心網友回復:
您無法阻止用戶更改 URL,因此您需要做的是找到某種方法來檢測用戶是否更改了 URL,然后在后端執行某些操作。問題是您無法將它們發送回它們來自的頁面,因此它們的流動會中斷。
如果您使用標準<form>輸入,可能最簡單的方法是在提供頁面時包含具有唯一 ID 的隱藏輸入:
<input type="hidden" id="noCheating" name="noCheating" value="34657">
然后當網路服務器處理 POST 時,您可以檢查noCheating發布的資料中是否存在以及它是否沒有退出。
如果后續頁面請求有referer標頭,服務器可以檢查這些標頭,然后拒絕沒有標頭的 GET 請求。
這兩種方法都是一種輕而易舉的成果,旨在將 99% 不關心的人拒之門外。如果您擔心實際的黑客,您將不得不在每一步都保存狀態,然后驗證之前問題的資料尚未按照@Wyck 的建議提交。
uj5u.com熱心網友回復:
正如其他人所說,鑒于 url 地址欄無法由網頁控制,因此無法阻止用戶隨意更改 url。
我猜當用戶嘗試編輯答案時,您正在請求如下所示的 API?我的建議是將請求方法更改為 POST 并通過正文傳遞引數,而不是從查詢字串(這基本上是后端的作業)。
通過這樣做,您的 url 將始終顯示為 like/question而不是/question?id=xxx,這意味著用戶無法通過更改id引數回傳。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358249.html
標籤:javascript 打字稿 Vuejs3
