如何阻止用户编辑 URL

Cen*_*ena 3 javascript typescript vuejs3

我目前正在制作一个回答问题的网站,但我遇到了问题。也就是说,比如在回答第二个问题时,但用户想回到上一个问题编辑答案,有2种方式:

  1. 使用浏览器的撤消按钮
  2. 更改网址

例如:问题?id=2 更改为问题?id=1

网络将重新加载上一个问题,他们可以更改答案。

我已经阻止了方法 #1,但是如果用户更改了 URL,我不知道如何阻止它?想请教一下你的解决方案,我用的是js,如果用vue3 ts就更好了。

Wyc*_*yck 5

如果您想阻止用户输入问题 1 的新答案,那么您需要在服务器上保留一些状态。维护一个问题列表,跟踪哪些问题已得到解答,哪些问题尚未得到解答。您请求时提供的页面question?id=1和服务器状态是这样的:用户已经回答了问题 #1 应该是显示错误的页面,或者只是通过重定向或仅通过呈现强制其转到第一个未回答的问题问题2或者合理的事情。但底线是服务器需要状态。

这就像,如果我转到我的银行页面,然后在浏览器中编辑我的余额,在我的银行帐户余额末尾添加几个 000,它实际上不会改变我银行中的金额,而只会改变正在发生的情况。本地显示。要实际更改银行余额,我必须向服务器发出请求,从而导致我的余额被更改。

对你来说也是一样。如果您不想接受已提交问题的新答案,那么您会知道页面何时尝试提交答案。该页面可能会使用用户对问题 1 的答案进行 POST,并且服务器将答案保存在某处。如果浏览器执行另一个 POST 并回答同一问题(因为用户破解了 URL),您可以简单地拒绝请求并拒绝更改服务器状态,返回某种错误,例如“您已经回答了该问题”。

在这种情况下,您向用户提供的体验实际上并不那么重要(他们正在黑客攻击),但为了做一些合理的事情,请考虑将浏览器重定向到正确的问题。下一个未回答的问题可能是对“您已经回答了该问题”REST 响应的一部分。