是的,我知道,另一个HTTP_REFERER工作。我看到它时会畏缩。但它已被交给我作为“回归”问题的解决方案,它确实有效,所以......
......问题是,我不太清楚它是否适合在现场进行部署。
我在这里经历了很多关于HTTP_REFERER危险的消息,不过我被告知这段代码可以解决这个特殊任务...但我不相信。
所以,我的问题在下面的代码的底部 - 但首先,这是它背后的基础:
此代码进入购物车。用户点击“查看购物车”后,它会提供“继续购物”按钮的操作。其目标是将最合适(或预期)的重定向提供回用户来自的位置。
默认情况下,如果没有添加此代码,此特定“查看购物车”页面的“继续购物”按钮只会将用户带到购物车的主页 - 如果用户导航了几页深度则会受到打击找到一组产品或特定类别,或正在查看产品等。所以我们希望改进这一点。此外,购物车需要javascript来完成购买,如果他们访问JS关闭,则警告用户,因此在此操作期间期望用户使用JS。最后,我们希望将解决方案保留在单个代码块中,因此可以轻松应用它并将其传输到购物车的更新版本,几乎没有问题。
我所描述的方法论:
如果设置了引用并且它不是空的,是的,那么它包含这个购物车的域,那么
1a上。如果引用者是购物车页面本身,则应用javascript(-1)效果,否则我们将被困在一个地方
1b中。 ELSE继续并应用Referer - Done。
ELSE如果设置了引用并且它不是空的但是它不包含此购物车的域
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)';
}
}
我的问题:
好的,所以我们结合了两种可疑方法,并且它们似乎总体上起作用了。但是这会出现什么问题(安全/功能)?这里有一个让我失踪的地方吗?
第二部分(2.和2a。)要完成的是什么?我向你解释的是努力确定某人是否故意试图喂错误的引用者 - 但这对我没有意义 - 为什么我们要关心将这个人引导到主页而不是使用javascript( -1)方法?
有关改进的任何想法?那些总是派上用场; - )
感谢您抽出宝贵时间......
答案 0 :(得分:1)
Referer只是用户访问购物车前访问过的最后一页。
Javascript:history.go()包含一系列类似于referer的访问过的页面,因此它可以向用户发回历史记录中的页面。我不知道除非购物车没有超时,否则会有什么风险。但我不是一个安全人员,所以最好让有更多知识的人解释那里的风险。
如果用户从其他网站直接跳到购物车中,那么确实应该有些不妥,而不是将它们留在那里,将它们发送到主页。在这种情况下,java是一个客户端软件,因此它没有浏览您的网站用于将用户发送到您的主页的历史记录。
如果你真的不喜欢referer,面包屑总是另一种选择,或$ _SESSION ['previousPage'] = ....
如果我错了,请纠正我。