2016-08-21 58 views
0

所以我一直在编写一个登录脚本,它在成功登录后重定向到上一页。我见过几个方式来传递引荐网址:传递和检索引用页面url

  1. 使用$ _ SERVER [“HTTP_REFERER”] - 将整个引荐URL。可能被操纵。所以不要被信任。

  2. $ _GET并将referer作为url参数传递。根本不安全。

  3. 在窗体中使用隐藏字段。即使使用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']

我知道应该怎样做才能验证形式URL参数:

  1. '../'可以帮助导航到前一个文件夹,并且必须删除。

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

  3. 必须删除所有'://'。

+1

不知道我真的能理解,但会话变量(如数组)来存储URL可以是适当的 - 你可以查找,在session var,前一页并重定向到 – RamRaider

+0

在$ _SESSION中存储这么多的URL会对它产生什么影响?在堆栈表单中使用它可能会有点问题,因为那么我将不得不进行检查以查看他们是否浏览过该页面,或者使用了浏览器上的后退按钮。 – BlackPanther

回答

1

一些提示:

  1. 您不必为重定向提供域在所有。因此,如果您不需要重定向到另一个域,请不要打扰 。当然 你必须检查,如果某些域不伪造$ ref
  2. 您可以在$ ref中使用页面别名而不是真正的URL,并在重定向之前构造url。
  3. 只有真正安全的方法是检查确实存在你的页面上的URL agains网址