关于php:传递和检索referer页面url

Passing and retrieving referer page url

所以我一直在编写一个登录脚本,成功登录后,它会重定向到上一页。我见过几种传递引用 URL 的方法:

  • 使用 $_SERVER['HTTP_REFERER'] - 发送整个引荐来源网址。可能被操纵。所以不值得信任。

  • $_GET 并将引用者作为 url 参数传递。一点都不安全。

  • 在表单中使用隐藏字段。即使使用 POST 也不那么安全。

  • 所以,由于方法 2 具有最大的灵活性,所以我选择了它。问题是:
    如果我在没有域的情况下传递 URL('http://www.domain.com/' 被剥离),然后在重定向时手动添加域,我可以确定生成的 URL 重定向保留在我的域中吗?如果没有,我该怎么做才能确保它不会跑偏?

    (假设不存在带有结果url的页面,则重定向到首页)

    例如:http://www.domain.com/login.php?ref=category/products/product-1.php
    成功登录后,页面被重定向到 'http://www.domain.com/'.$_GET['ref']

    我知道应该做些什么来验证referer url参数:

  • '../' 可以帮助导航到上一个文件夹,如果有,必须将其删除。

  • 在referer url参数中传递的所有标签必须被剥离。

  • 必须删除所有"://"。


  • 小贴士:

  • 您根本不需要在重定向中提供域。所以不要打扰
    如果您不需要重定向到另一个域,则使用域。当然
    你必须检查,如果某个域不是在 $ref 中伪造的
  • 您可以在 $ref 中使用页面别名而不是真正的 url,并在重定向之前构造 url。
  • 唯一真正安全的方法是检查 url 和页面上确实存在的 url