Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $服务器[';HTTP#REFERER';]和cookie_Php_Http Referer - Fatal编程技术网

Php $服务器[';HTTP#REFERER';]和cookie

Php $服务器[';HTTP#REFERER';]和cookie,php,http-referer,Php,Http Referer,我在SO和其他网站上读到,$\u SERVER['HTTP\u REFERER']是我们作为程序员应该避免的事情。阅读PHP手册时,我们会遇到以下几行: 将用户代理引用到当前页面的页面(如果有)的地址。这是由用户代理设置的。并非所有的用户代理都会设置此功能,有些代理还提供了修改HTTP_REFERER的功能。简言之,它真的不可信 考虑到Web浏览器等“用户代理”(Safari、Chrome、Opera、Firefox,基本上都是),手册告诉我们这个变量可能会被他们改变。 这是我的第一个问题: 问

我在SO和其他网站上读到,
$\u SERVER['HTTP\u REFERER']
是我们作为程序员应该避免的事情。阅读PHP手册时,我们会遇到以下几行:

将用户代理引用到当前页面的页面(如果有)的地址。这是由用户代理设置的。并非所有的用户代理都会设置此功能,有些代理还提供了修改HTTP_REFERER的功能。简言之,它真的不可信

考虑到Web浏览器等“用户代理”(Safari、Chrome、Opera、Firefox,基本上都是),手册告诉我们这个变量可能会被他们改变。 这是我的第一个问题:

问题1:为什么“用户代理”要修改此参数?web浏览器不设置此参数的原因是什么

这只是好奇,我不会使用
$\u服务器['HTTP\u REFERER']
。 从我最近的陈述中,我们忘记了,如果我们真的需要这样一个函数,我们需要找出一些东西。我想到的第一件事是一个cookie解决方案,在这个解决方案中,我们做了如下事情:

setcookie('latest_page', __FILE__, 60 * 60 * 24 * 7);
然后,根据您喜欢的方式,您可以恢复您需要的。 下面是第二个也是最后一个问题:

问题2:这样最好吗?有什么办法可以改进吗

没有理由避免HTTP\u REFERER。在使用它时,请注意它并不总是被设置的,而且它可以由客户端自由操作,因此它是不受信任的数据

绝大多数客户机都设置了变量,并且设置正确

阻止它的主要原因是隐私:例如,在web邮件客户端中打开电子邮件时,指向外部图像的链接将在
HTTP\u REFERER
标题中携带web邮件服务的地址。这就是为什么

您建议的解决方法仅适用于同一站点内的移动,如果用户打开了多个选项卡/浏览器窗口来浏览您的站点,则该方法将失效。如果需要了解引用页面,最好的方法是添加一个GET参数,如

<a href="otherpage.html?from=thispage.html">


编辑:依赖HTTP\u REFERER是危险的一个例子是在主页上显示一个实时更新的引用站点列表(“访问者来自…”)。通过使用伪HTTP\u REFERER集访问您的站点,很容易将任意URL走私到该列表中

请记住,与客户端设置的任何头一样,它也可以被篡改。所以要明智地使用它。

基于Cookie的解决方案既不是最好的,也不是最好的解决方案。
没有人使用它,因为cookie是站点范围内的事情

大多数时候,“返回”链接都是无用的。每个现代浏览器都有一个后退按钮。

如果你想实现它,只要让它与其他站点上的实现方式相同即可

如果Http Referer与您的网站数据库有关系(如果未经消毒),那么它可能是危险的。它也是完全客户端,所以有可能有人可以利用它。但除此之外,它也没有什么问题

饼干也可以换。如果您想要一些用户无法更改的内容,请使用Php会话

为什么“用户代理”要修改此参数?web浏览器不设置此参数的原因是什么

HTTP referer可用于分析用户的行为,因为您可以看到引用当前页面的页面。它还可以向第三方站点公开URL中的敏感数据,如会话ID。这就是为什么许多网站使用dereferrer作为所有外部链接的单一退出页面

这就是为什么一些用户代理根本不发送HTTP引用的主要原因。与此相反,只有当您实际跟踪链接或提交页面上的表单时,才会发送HTTP引用。任何以其他方式触发的请求(HTTP重定向、通过位置栏/书签的直接请求)都不是推荐人

这条路最好吗?有什么办法可以改进吗

如果你在多个选项卡/窗口中打开了一个网站,那么这样做是行不通的。每个页面请求都需要一个标识符,以便能够识别实际引用此页面的页面:

  • 当前请求的页面:/index.html
  • 当前请求页面的请求ID:12345
然后,每个链接将包含请求ID,以标识引用下一页的请求:

<a href="/foo.html?request-id=12345">
<a href="/bar.html?request-id=12345">


通过在表单上执行此操作,并对页面请求ID另外使用不可预测的值,您还可以使CSRF攻击更加困难。

如果您需要返回链接,您应该使用以下链接:

<a href="javascript:history.back();"><< Go Back</a>

问题1:为什么“用户代理”
是否修改此参数?有什么问题
未设置web浏览器的原因
这个参数

嗯,网络浏览器没有理由不设置这个。你被告知要避免使用它,因为与某些浏览器会避免使用它的原因相同,这就是误用。比如在URL中保存重要的会话信息

你不应该试图避免使用它,你应该负责任地使用它。不必使用任何“噱头”。例如,将其用作“简历”导航是非常常见的。比如说,有人使用你的网页时会话过期了。您可以将它们发送到登录凭据页面。然后将它们重定向到请求的URL

当他们试图在不通过登录屏幕的情况下首次访问您的网页时,情况也是如此

  • 启动浏览器(Cookie o会话中未保存任何信息)
  • 访问www.YourApp.com/restrictedZone.php
  • 重定向到登录
  • 登录挑战通过
  • 重定向到受限区域,而不是“index.php”或“home.php”

  • 你应该确保在所有“限制区”页面上检查有效会话。

    你需要referer做什么?@zerkms,一个“返回”链接。Pigarelli:在什么情况下?在99%的情况下,你会
    <a href="javascript:history.go(-1);"><< Go Back</a>