完美兼容各大浏览器获取HTTP_REFERER方法总结
后来查了一些相关资料,发现在IE中通过window.location.href或者是是无法获取HTTP_REFERER,真是搞不懂IE的浏览器,很多浏览器运行的很好的东西,它就是不支持,最后没有办法,只能PHP伪造来源HTTP_REFERER的方法或者用JS来伪造。
IE可以识别的HTTP_REFERER提交是通过click触发的事件或者是Form表单提交的请求,下面是根据网上的资料总结的一个方法:
<script> functionreferURL(url){ varisIe=(document.all)?true:false; if(isIe){ varlinka=document.createElement(‘a'); linka.href=url; document.body.appendChild(linka); linka.click(); } elsewindow.location=url; } varurl=”https://www.nhooo.com”; referURL(url); </script>
这个方法先是用document.all来判断当前的浏览器是否是IE,如果是的话就生成一个link,然后自动执行onclick事件,如果不是的话就用JS跳转。这样在处理页面就可以得到HTTP_REFERER了
此方法在IE,Firefox,Safari,Chrome测试通过
2.PHP利用curl伪造IP和来路HTTPReferrer
referer.php
<?php $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,"http://mydomain.com/ip.php"); curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-FORWARDED-FOR:8.8.8.8','CLIENT-IP:8.8.8.8'));//构造IP curl_setopt($ch,CURLOPT_REFERER,"https://www.nhooo.com/");//构造来路 curl_setopt($ch,CURLOPT_HEADER,1); $out=curl_exec($ch); curl_close($ch); echo$out;
ip.php
<?php functiongetClientIp(){ if(!empty($_SERVER["HTTP_CLIENT_IP"])) $ip=$_SERVER["HTTP_CLIENT_IP"]; elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) $ip=$_SERVER["HTTP_X_FORWARDED_FOR"]; elseif(!empty($_SERVER["REMOTE_ADDR"])) $ip=$_SERVER["REMOTE_ADDR"]; else $ip="err"; return$ip; } echo"IP:".getClientIp()."<br>"; echo"referer:".$_SERVER["HTTP_REFERER"];