加入收藏 | 设为首页 | 会员中心 | 我要投稿 莱芜站长网 (https://www.0634zz.com/)- 云连接、建站、智能边缘云、设备管理、大数据!
当前位置: 首页 > 编程开发 > PHP > 正文

防跨站提交和PHP伪造来源referer地址的方法

发布时间:2020-08-01 19:05:09 所属栏目:PHP 来源:互联网
导读:介绍《防跨站提交和PHP伪造来源referer地址的方法》开发教程,希望对您有用。

《防跨站提交和PHP伪造来源referer地址的方法》要点:
本文介绍了防跨站提交和PHP伪造来源referer地址的方法,希望对您有用。如果有疑问,可以联系我们。

如今网络上十分流行论坛自动发帖机,自动顶贴机等,给众多论坛网站带来了大量的垃圾信息,许多网站只是简单地采用了判断HTTP_REFERER的值来进行过滤机器发帖,可是网页的HTTP_REFERER来路信息是可以被伪造的。


一、首先来谈跨站:

在PHP防止跨站提交表单或跨站访问时,一般会先取来源页,如下SOURCE_PAGE:


//来源页设置
$refererTmp = !empty($_SERVER['HTTP_REFERER']) ? safe_UrlFilter($_SERVER['HTTP_REFERER']) : '';
define('SOURCE_PAGE',  addslashes($refererTmp));  //来源
//防止HTTP响应拆分功击
//所有网址和写入到header,setcookie()只要涉及网址,均需过滤。
function safe_UrlFilter($url)
{
       $url = htmlspecialchars(strip_tags(str_replace(array("r","n","%0a","%0d"),'',$url)),ENT_QUOTES,'utf-8');
       return trim($url);
}

然后把SOURCE_PAGE和你的域名对比

if(stripos(SOURCE_PAGE,'http://www.jb51.cc')!==0) exit('勿跨站提交');


不过,这种方法并不靠谱,因为来源是很容易伪造的。不过,你还是要使用,目的是排除一些新手。再进一步就要令牌和加密串等方式来验证来源的可靠性。


在几乎所有的采集程序中,除非是新手写的,否则都会伪造来源referer地址。那如何伪造来源?


二、伪造referer来源的方式:

这里分别介绍CURL、SOCKET、file_get_contents实现方法,详细代码如下:


1、CURL方式:

$ch = curl_init();

curl_setopt ($ch,CURLOPT_URL,"http://www.jb51.cc");

curl_setopt ($ch,CURLOPT_REFERER,"http://www.jb51.cc");  #伪造

curl_exec ($ch);

curl_close ($ch);

 

2、SOCKET方式:

$server = 'www.jb51.cc';

$host = 'www.jb51.cc';

$target = 'index.php';

$referer = 'http://vecms.jb51.cc'; #伪造

$port = 80;

$fp = fsockopen($server,$port,$errno,$errstr,30);

if (!$fp){

    echo "$errstr ($errno)n";

}else{

    $out = "GET $target HTTP/1.1rn";

    $out .= "Host: $hostrn";

    $out .= "Referer: $refererrn";

    $out .= "Connection: Closernrn";

    fwrite($fp,$out);

    while (!feof($fp)){

        echo fgets($fp,128);

    }

    fclose($fp);

}

 

3、file_get_contents方法:

$opt=array('http'=>array('header'=>"Referer: $refer")); 

$context=stream_context_create($opt); 

$file_contents = file_get_contents($url,false,$context);


因此,单纯判断referer是不可靠的,在安全性要求较高时,需要采用IP、验证码、令牌、加密等多种方式验证。

(编辑:莱芜站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读