首頁 > 後端開發 > php教程 > 一个重大困惑难题,如何有效防止CSRF攻击

一个重大困惑难题,如何有效防止CSRF攻击

WBOY
發布: 2016-06-23 13:56:34
原創
1122 人瀏覽過

网上有种方法是使用
$_SERVER['HTTP_REFERER']
但是有文章又指出
referer可以伪造的
例如
header("referer:www.aaa.com")
……
?>
我试了一下,貌似用header发送在控制台台里看到referer是变化了
但是$_SERVER['HTTP_REFERER']是空的,说明似乎没问题
那到底这个参数行不行呢?能不能防止呢?


回复讨论(解决方案)

CSRF通过伪装来自受信任用户的请求来利用受信任的网站

那么用 $_SERVER['HTTP_REFERER'] 显然是不可以的,因为这是可伪造的(你也是知道的)
对于表单,你可以放置一个即时发放的随机串(token)或验证码
对于普通页,你可以通过 ajax 获取一个通行字(因为 ajax 是不可跨域的,且模拟 js 行为技术难度较大)
你也可以通过页面中后期加载的对象(比如图片、js 文件)来传递附加的 cookie 变量
被动防御时,可过滤掉页面中非已知的连接

$ch = curl_init();$opts = array(			CURLOPT_URL 		   => 'http://your web/test.php',			CURLOPT_RETURNTRANSFER => true,			CURLOPT_REFERER		   => 'http://spider.baidu.com/', //伪造referer			CURLOPT_HTTPHEADER	   => array(										"Expect: ",										),			);curl_setopt_array($ch, $opts);$s = curl_exec($ch);
登入後複製

你在 'http://your web/test.php' 脚本拿到的refer就是那个spider.baidu.com了
伪造应该是这个意思

你百度 curl模拟登陆 很多相关的资料. PHP实战QQ群:  33918040

OK,我再研究研究~~

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板