0

是的,我知道,另一个 HTTP_REFERER 努力。当我看到它时,我畏缩。但它已作为“返回”问题的解决方案交给我,它确实有效,所以......

...问题是,我对它的理解还不够,无法在现场部署它。

我在这里阅读了很多关于 HTTP_REFERER 危险的消息,但是我被告知这段代码针对这个特定任务解决了这些问题......但我不相信。

所以,我的问题在下面代码的底部 - 但首先,这是它背后的基础:

此代码进入购物车。它在用户单击“查看购物车”后提供“继续购物”按钮的操作。它的目标是提供最合适的(或预期的)重定向到用户来自的地方。

默认情况下,如果不添加此代码,此特定“查看购物车”页面的“继续购物”按钮只会将用户带到购物车的主页 - 如果用户已经导航了几页深度以找到一个一组产品或一个特定的类别,或者正在查看一个产品等。所以我们想要改进它。此外,购物车需要 javascript 才能完成购买,如果用户在关闭 JS 的情况下访问,则会警告用户,因此在此操作期间用户需要打开 JS。最后,我们希望将解决方案保留在单个代码块中,以便可以轻松应用并传输到购物车的更新版本而几乎没有问题。

向我描述的方法:

  1. 如果设置了推荐人并且它不为空并且是的它确实包含此购物车的域然后

    1a。如果引用者是购物车页面本身,请应用 javascript (-1) 效果,否则我们将卡在一个地方

    1b。ELSE 继续申请Referer - 完成。

  2. 否则,如果设置了推荐并且它不为空但不包含此购物车的域,则

    2a。有问题,发到主页。(?? 为什么 ??)

    2b。ELSE 让我们应用 javascript (-1) 效果。- 完毕。

编码:

if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) === 0))) {
    if ($_SERVER['HTTP_REFERER'] == HTTP_SERVER . 'index.php?r=cart') {
        $this->data['continue'] = 'javascript:history.go(-1)';
    }
    else {
        $this->data['continue'] = html_entity_decode($_SERVER['HTTP_REFERER']);
    }
}
else {
    if ((isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], HTTP_SERVER) !== 0))) {
        $this->data['continue'] = 'index.php?r=home';
    }
    else {
        $this->data['continue'] = 'javascript:history.go(-1)';
    }
}

我的问题:

  1. 好的,所以我们结合了两种可疑的方法,总的来说它似乎有效。但是这(安全/功能)会出现什么问题?这里有我想念的表演者吗?

  2. 第二部分(2. 和 2a.)要完成什么?我解释说这是为了确定是否有人故意尝试提供虚假推荐人-但这对我来说没有意义-为什么我们关心将该人路由到主页而不是使用 javascript ( -1)方法?

  3. 有什么改进的想法吗?那些总是派上用场;-)

感谢您花时间帮助解决这个问题...

4

1 回答 1

2

推荐人只是用户在进入购物车之前访问的最后一页。

  1. Javascript:history.go() 包含一个类似于referer的访问页面数组,因此它可以将用户返回历史页面。除非购物车没有超时,否则我不知道这是什么风险。但我不是一个安全人员,所以最好让有更多知识的人解释那里的风险。

  2. 如果用户从其他网站直接跳转到那里的购物车,那么确实应该有什么问题,而不是将它们留在那里,将它们发送到主页。在这种情况下,java 是一个客户端软件,因此它不会有浏览您的站点的历史记录来将用户发送到您的主页。

  3. 如果你真的不喜欢referer,面包屑总是另一种选择,或者 $_SESSION['previousPage'] = ....

如我错了请纠正我。

于 2011-05-06T18:17:55.377 回答