关于csrf

CSRF全称Cross Site Request Forgery,即跨站点请求伪造。

我们需要关注两点:一个是跨站点,一个是"伪造"

 

csrf应该是这样的:受害者正在打开某网站>攻击者欺骗或者诱导受害者访问攻击者自己的网站>受害者访问一个攻击者站点>攻击网站会自动发送http请求给受攻击的站点>因为受攻击站点保存了受害人登录的状态,导致服务器以为是受害者自己在操作

 下面是从乌云里拿到的图,大概流程就是这样:

CSRF的攻击过程大致如图:

 

CSRF攻击方式有两种:一种是HTML CSRF攻击,一种是JSON HiJacking攻击

(1)HTML CSRF攻击:

即利用HTML元素发出GET请求(带src属性的HTML标签都可以跨域发起GET请求),如:

<link href="...">

<img src="...">

<iframe src="...">

<meta http-equiv="refresh" content="0;url=...">

<script src="...">
<video src="...">
<audio src="...">
<a href="...">
<table background="...">

(2)JSON HiJacking攻击

对于防御csrf,一般有

  1. 添加验证码
  2. 使用一次性token
  3. 验证Referer
  4. 限制Session生命周期
  5. 临时Cookie

而使用验证码会影响用户体验,使用一次性token会因为随机性不够好或通过各种方式泄露,验证Referer有时候回因为有些请求不带Referer

而临时Cookie原理与token差不多:当表单提交时,用JavaScript在本域添加一个临时的Cookie字段,并将过期时间设为1秒之后在提交,服务端校验有这个字段即放行,没有则认为是CSRF攻击。

posted @ 2016-06-07 01:43  thouger  阅读(247)  评论(0编辑  收藏  举报