[PHP]IE和FF:获取Referer的JS和PHP方法PHP利用curl伪造IP和来路
发现一个关于浏览器兼容的问题,当用JS 执行代码 window.location.href=”http://justcoding.iteye.com” 来进行跳转的时候,Firefox 可以获取到到HTTP_REFERER页面,但是在IE中这一项为空,后来查了一些相关资料,发现在IE 中通过 window.location.href 或者是 是无法获取HTTP_REFERER, 真是搞不懂 IE 的浏览器,很多浏览器运行的很好的东西,它就是不支持,最后没有办法,只能PHP伪造来源HTTP_REFERER的方法或者用JS来伪造。
IE可以识别的 HTTP_REFERER 提交是通过click 触发的事件或者是 Form 表单提交的请求,下面是根据网上的资料总结的一个方法:
- <script>
- function referURL(url){
- var isIe=(document.all)?true:false;
- if(isIe) {
- var linka = document.createElement(‘a’);
- linka.href=url;
- document.body.appendChild(linka);
- linka.click();
- }
- else window.location = url;
- }
- var url=”http://justcoding.iteye.com”;
- referURL(url);
- </script>
这个方法先是用 document.all 来判断当前的浏览器是否是IE, 如果是的话就生成一个link,然后自动执行 onclick 事件,如果不是的话就用JS 跳转。这样在处理页面就可以得到 HTTP_REFERER 了 ,此方法在IE, Firefox, Safari , Chrome 测试通过
2. PHP利用curl伪造IP和来路HTTP Referrer
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, "http://www.justcoding.iteye.com/ "); //构造来路
- curl_setopt($ch, CURLOPT_HEADER, 1);
- $out = curl_exec($ch);
- curl_close($ch);
- echo $out;
ip.php
- <?php
- function getClientIp() {
- if (!empty($_SERVER["HTTP_CLIENT_IP"]))
- $ip = $_SERVER["HTTP_CLIENT_IP"];
- else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
- $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
- else if (!empty($_SERVER["REMOTE_ADDR"]))
- $ip = $_SERVER["REMOTE_ADDR"];
- else
- $ip = "err";
- return $ip;
- }
- echo "IP: " . getClientIp() . "<br>";
- echo "referer: " . $_SERVER["HTTP_REFERER"];
热门文章推荐
- [JS]window.location获取url各项参数详解
- [JS]jQuery,javascript获得网页的高度和宽度
- [JS]视频弹窗视频弹出层videoLightBox(含三种播放器的用法)
- [JS]JS提交中文encodeURI两次转码
- [JS]js版方面encodeURI转码和decodeURI解码的用法实例
- [JS]js取当前机子的时间戳实例
- [JS]AES加密(基于crypto-js)PHP后端解密
- [JS]data:image/png;base64写法的用途及说明