我有一个简单的跟踪像素,用于验证用户帐户:
<?php
header('Content-Type: image/gif');
readfile('trackingpixel.gif');
if(isset($_GET['a'])){
... stuff
}
if(isset($_GET['b'])){
... stuff
}
if(isset($_GET['c'])){
... stuff
}
$requesting = $_SERVER['HTTP_REFERER'];
... If requesting matches value stored in db, and a/b/c are all good, do stuff
?>
可通过以下方式访问:
<img src="http://thisismydomain.com/trackingpixel.php?a=...&b=...&c=..." />
通常按预期工作。
这个想法是有些用户拥有自己的域名,并且想要&#34;要求&#34;他们,并验证他们是真正的所有者。我们还有其他验证选项(即META标签),但对于最基本的用户来说,这是最简单的 - 只需复制并粘贴透明图像,Bob就是你的阿姨。
包含请求域的唯一$_SERVER
变量是HTTP_REFERER
,但即使是最简单的Google搜索也会返回大量文章,讨论价值的不可靠性和易于欺骗性。
&#39; HTTP_REFERER&#39;
引用该页面的地址(如果有的话) 用户代理到当前页面。这是由用户代理设置的。不是全部 用户代理将设置此,并且一些提供修改的能力 HTTP_REFERER作为一项功能。简而言之,它无法真正被信任。
并且有无数的SO帖子都在讨论相同的内容。
按照目前的情况,一个半职业的计算机猴子可以欺骗他们不正确的域名显示为正确的域名,然后将<img>
放在他们的页面上。我的PHP脚本会认为一切都很荣幸,并且通过了所有条件。
没有bueno! Pas bien!
是否有替代HTTP_REFERER
,我可以用来验证请求域?什么是安全的,最好是必需的?