用户是否使用了 URL 栏?

Did the user use the URL bar?

我需要知道是否有人使用 URL 栏导航到我的应用程序的特定页面,或者他们是否单击 link 到达那里。

我想阻止用户使用 URL 栏导航到某些页面。

问题是我无法使用 HTTP 引荐来源网址,因为当 URL 更改时我的应用程序不会加载新页面。它只是在页面上加载新数据,因此我的推荐人始终是登录屏幕。还有各种触发器可以更改 URL 以自动加载此数据,因此我需要确定用户专门输入 url 栏并按回车键。

是否有任何其他方式知道用户从 URL 栏输入了内容以便我可以阻止该请求?

所以您是说您的页面使用 Java脚本 API 从服务器动态加载 HTML 文件,例如 fetch, then uses the JavaScript History API 来更新 URL 和加载的 HTML 文件的名称?所以第一个 URL 是 /page?name=logincheck.html,然后它在执行登录检查后将 URL 更改为 /page?name=thetool.html,而不重新加载页面?

如果这就是您的应用程序的工作方式,理论上您可以禁用 URL 重写 - 应用程序仍然可以知道它在哪个页面上,因为 Java 脚本可以将当前页面保存到一个变量.然后用户将永远不会看到绕过登录检查的 URL 和 thetool.html。但是此设置不会保护您免受能够猜测 thetool.html 是一个存在的页面的恶意黑客的攻击。

如果您想阻止人们加载特定页面,正确的检查位置是在服务器端。如果您在 JavaScript 中进行了安全检查,恶意用户可能会告诉他们的浏览器忽略该 JavaScript,而 运行 他们自己的 JavaScript 则不会做检查。

如何在服务器端检查是否有人登录取决于您使用的是什么服务器软件(Apache 服务器,一个 Java Spring MVC 应用程序,一个 Ruby Rails 应用程序)以及您当前的登录页面当前如何告诉软件的其余部分用户已登录(cookie、数据库中 sessions table 中的一行、JSON Web Token保存到本地存储)。在不知道您使用的软件和认证方式的情况下,我无法给出说明,但我可以告诉您这是可能的。

一般来说,登录应该告诉服务器创建一个新的用户会话,并在引用该会话的浏览器中保存一个 cookie。每当浏览器请求受保护的页面时,服务器软件应首先检查是否发送了会话 cookie,以及会话 cookie 是否对应于当前有效的会话。如果没有,服务器软件应该发送一个带有 403 Forbidden 状态代码的空页面而不是实际页面。