stay hungry stay foolish

csrf攻击

CSRF(Cross Site Request Forgeries)跨网站请求伪造,也叫XSRF,通过伪装来自受信任用户的请求来攻击利用受信任网站。

原理:

例:

  1. 用户打开浏览器,访问受信任银行网站,输入用户名和密码请求登录网站;
  2. 在用户信息通过验证后,银行网站产生Cookie信息并返回给浏览器,此时用户登录网站成功,可以正常发送请求到网站;
  3. 用户未退出银行网站之前,在同一浏览器中,打开一个TAB页访问其他网站B;
  4. 这时候网站B 已被黑客注入诱导信息,加入是一张图片,图片地址指向src=”http://bank.example/withdraw?account=bob&amount=1000000&for=黑客”,点击之后转账给黑客这个账户;
  5. 浏览器在接收到这些攻击性代码请求后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,根据用户的Cookie信息以C的权限处理该请求,导致来自黑客请求恶意代码被执行。

CSRF防范:

方法一、Token 验证:(用的最多)

  • 服务器发送给客户端一个token
  • 客户端提交的表单中带着这个token
  • 如果这个 token 不合法,那么服务器拒绝这个请求

由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。

方法二:隐藏令牌:

把 token 隐藏在 http 的 head头中。该和方法一有点像,本质上没有太大区别,只是使用方式上有区别。

方法三、Referer 验证:

Referer 指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截(有些低版本浏览器存在Referer被更改的风险,如IE6或FF2)。