所以我一直在写一个登录脚本,成功登录后,重定向到前一页。我已经看到了几种传递引用URL的方法:
-
Using $_SERVER['HTTP_REFERER'] -发送整个referer URL。可能被操纵。
-
$_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