【问题标题】:Is <a href="javascript:history.go(-1)">Go back</a> safe?<a href="javascript:history.go(-1)">返回</a>安全吗?
【发布时间】:2014-01-24 02:07:17
【问题描述】:

我有一个类似于自定义 404 错误页面中标题中的链接,它允许用户像使用浏览器的返回按钮一样转到上一页。我只想问这种链接方法是否安全。我想这是安全的,但我不确定。感谢您的问候!

【问题讨论】:

  • 请定义safe
  • 人们可以想象网站冒充非常不专心的用户。但与其说是安全隐患,不如说它在 UI 点上看起来更像是个坏主意。浏览器已经有这个功能了。
  • 它只会在浏览器历史记录中返回 1 步。唯一不好的是,如果有人从另一个页面(例如:Google)访问您的网站,它将返回到 google。
  • 那你为什么要给自己带来一些额外的工作。
  • 谢谢,我试图找出如何从用户来自的地方获取 URL,我尝试了 $_SERVER['HTTP_REFERER'] 但它不起作用,所以我找到了解决方案,这有效。所以除了这不是最好的解决方案之外没有安全问题,对吗?

标签: javascript php hyperlink href


【解决方案1】:

我可以说不“安全”的一个用例是用户禁用了 JavaScript。在这种情况下,您必须使用服务器端代码动态创建链接,使用 HTTP referer header field's 值作为锚元素上的 href 值。

另一件需要考虑的事情是,如果用户来自带有 HTTP 重定向的页面,他们会陷入永无止境的来回循环。

编辑

正如你上面所说,你可以使用 $_SERVER['HTTP_REFERER'] 但文档说

.. 这是由用户代理设置的。不是所有的用户代理都会设置这个, 有些提供修改 HTTP_REFERER 的功能。在 简而言之,它不能真正被信任。

实际上,尽管大多数浏览器都正确设置了它,并且看到这不是关键任务,我认为如果您使用它是安全的。您还可以考虑没有如下设置的浏览器:

if(isset($_SERVER['HTTP_REFERER']))
{
    // Show a Back button link, if the referrer is available
    echo "<a href=\"".$_SERVER['HTTP_REFERER']."\">&laquo; Back</a>";
}
else
{
    // If not, show a link to your homepage instead
    echo "<a href=\"". "//www.yoursite.com" ."\">Home</a>";
}

【讨论】:

  • 如何通过服务器端做到这一点?
  • 如果不跟踪他们的运动,你就做不到。
  • 我的意思是,动态地创建链接?例如用 php?
  • @user3019105 用更多信息和 PHP 示例更新了答案
  • HTTP_REFERER 是由浏览器设置的,所以这就是您控制变量是否设置正确的原因?
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 2013-06-30
  • 2022-08-15
  • 2011-08-02
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多