通过GET在PHP中安全地传递/检索推荐人页面?

时间:2014-11-22 06:53:20

标签: php security redirect get referrer

我已经阅读了几篇关于在用户操作登录/等时重定向到上一页的帖子。大多数人提到通过HTTP_REFERRER获取上一页网址是不可靠/不安全的。

我的问题是,我可以在网址的末尾添加一些信息,login.php?referrer=mainlogin.php?referrer=prof,并依赖这些变量来欺骗,CRSF,改变无论如何?

POST会更好/更差吗?是否有任何可靠/安全的方式来实现我的目标?

基本上,我正在尝试找到在PHP中获取引用页面的最佳方法,以便可以将其重定向到没有恶意意图导致站点故障的风险。

TIA。

编辑:场景:

用户访问评论页面,但需要登录才能发布评论,因此会在页面上放置login to comment链接。当用户单击login to comment链接时,其目标将是login.php?comment20303,在访问登录页面并提供经过验证的凭据后,应将其返回到登录前发起的comment20303页面。 / p>

REEDIT:我的问题归结为,将重定向网址附加到登录页面,通过GET访问它,并重新使用它将它们返回原始页面安全吗?从下面的评论看来,答案是否定的,并非没有一些有效性检查。

1 个答案:

答案 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最容易用于重定向。

编辑:基于您的评论

  1. 用户正在输入评论,评论具有系统生成的ID。
  2. 用户未经过身份验证,因此会重定向到使用URL
  3. 中的ID进行注册/登录
  4. 用户注册/登录再次传递URL中的ID
  5. 系统进行身份验证,因为有$ _GET ['commentID'],它会插入一个将用户与评论相关联的数据库条目
  6. 将用户返回到评论编辑区域,其中包含URL和句柄ID。
  7. 始终修剪并剥离GET