Heim  >  Artikel  >  Backend-Entwicklung  >  一个重大困惑难题,如何有效防止CSRF攻击

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

WBOY
WBOYOriginal
2016-06-23 13:56:341094Durchsuche

网上有种方法是使用
$_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,我再研究研究~~

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn