【问题标题】:Can I hide the actual URL of a specific page?我可以隐藏特定页面的实际 URL 吗?
【发布时间】:2023-04-11 05:04:01
【问题描述】:

我想隐藏特定页面的 url 以防止用户直接访问它。

我有一个表单,用户必须在被重定向到 www.******.com/xyz.php 之前填写该表单。

当他们完成表单并被重定向后,URL 是否可以显示为 www.******.com?

期待任何建议!

【问题讨论】:

  • 你为什么要重定向它们?为什么不只提供内容以响应表单的 POST 请求?
  • 永远不要考虑“从 URL 中隐藏”。用户看到的页面由 URL 决定。浏览器中显示的 URL 是用户看到的页面。您不能让用户访问页面 A,但在地址栏中显示页面 B。如果他们访问的是页面B,那么页面B会显示在他们的地址栏中,否则他们就不会访问页面B。你需要进入的是HTTP的请求-响应思想,并且你的服务器总是在完全控制它发送给什么requestresponse。 URL 只是其中的一小部分。

标签: php url-routing


【解决方案1】:

虽然这可能不是最佳实践,但您可以为 Http Get 操作提供一组 html,为 Http Post 操作提供另一组。您的 get 操作可以返回表单,而对 post 操作的响应可以返回您的第二页。

这是一个坏主意的原因有很多,其中包括

  • Http Post 旨在引起状态更改,而不是保护对 页面
  • 任何类型的代理或休息客户端都可以轻松击败它
  • 浏览器中的导航可能会出现异常
  • 用户必须为每次访问填写表单。

最好想出替代解决方案,例如生成临时访问令牌或设置 cookie 以表明他们已完成表单。

最佳 解决方案可能有待商榷,但一个简单的解决方案是拥有两个 .php 页面,我们称它们为 index.phpform.php。当向www.example.com 发出GET 请求时,您的Web 服务器配置为提供index.php。 (执行此操作的确切方法取决于您的服务器软件)。

index.php 检查 cookie 并在未设置 cookie 时重定向到 form.phpSee this question/answer for more details

form.php 通过为表单提供 html 来响应 GET 请求,并通过设置 cookie 并重定向回 index.php 来响应 POST 请求。

【讨论】:

  • “轻松击败”……?它不完全应该是对任何东西的防御……
  • @deceze "防止用户直接访问" - 但也许防御还是有点太强了
猜你喜欢
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
相关资源
最近更新 更多