我已经阅读了几篇关于在用户操作登录/等时重定向到上一页的帖子。大多数人提到通过HTTP_REFERRER获取上一页网址是不可靠/不安全的。
我的问题是,我可以在网址的末尾添加一些信息,login.php?referrer=main
或login.php?referrer=prof
,并依赖这些变量来欺骗,CRSF,改变无论如何?
POST会更好/更差吗?是否有任何可靠/安全的方式来实现我的目标?
基本上,我正在尝试找到在PHP中获取引用页面的最佳方法,以便可以将其重定向到没有恶意意图导致站点故障的风险。
TIA。
编辑:场景:
用户访问评论页面,但需要登录才能发布评论,因此会在页面上放置login to comment
链接。当用户单击login to comment
链接时,其目标将是login.php?comment20303,在访问登录页面并提供经过验证的凭据后,应将其返回到登录前发起的comment20303页面。 / p>
REEDIT:我的问题归结为,将重定向网址附加到登录页面,通过GET访问它,并重新使用它将它们返回原始页面安全吗?从下面的评论看来,答案是否定的,并非没有一些有效性检查。
答案 0 :(得分:0)
通常我会将引荐页面放入表单中的隐藏字段
<input type="hidden" name="ref" value="login.php"/>
然后在我的目标页面中,我将使用带有变量设置的引用来告诉登录页面为什么它被重定向回来
$ref = trim(strip_tags($_POST['ref']));
//something causes an error (incorrect password maybe)======
$error = "true";
$msg = urlencode("Login Incorrect");
//no harm in putting the referring page in the GET but I don't think you need it for a login process.
header('location: '.$ref.'?error='.$error.'&msg='.$msg);
die();
回到登录页面,我将处理错误,如果设置它,告诉我我来自表单目标并且出现错误
if (isset($_GET['error']) && $_GET['error'] == "true"){
$error = true;
$msg = trim(strip_tags($_GET['msg']));
//Echo out the msg if it is set somewhere in your HTML
}
我更喜欢在提交表单时使用POST。 GET最容易用于重定向。
编辑:基于您的评论
始终修剪并剥离GET