原理
攻击者使用用户的身份执行用户未授权的操作,攻击者以你的名义执行了操作,达到了攻击者的目的,这对浏览器来说是合法的但你不知道,大多数情况下是用户在浏览器保持登录的状态下被攻击者诱使点击了恶意链接从而被攻击者窃取了身份
危害
以受害者的名义发邮件、消息,获取用户信息,盗取用户帐密,甚至冒充用户身份购买商品,转账等
csrf漏洞挖掘
1.抓包,如果没有referer字段和cookie,那么大概率有csrf漏洞
2.如果请求包里有referer,去掉referer字段后再次发送,如果数据包还有效大概率存在csrf漏洞
3.工具扫描,如CSRFTESTER,CSRF REQUEST BULIDER等
利用
目前admin用户余额70299
hacker余额300
此时admin用户在保持登录的状态下点击了恶意链接,并且被诱惑点击了屠龙宝刀
此时hacker账户多了100,admin少了100,在admin用户不知情的情况下完成了转账
防御
1.添加验证码
1.验证 http referer字段,根据 HTTP 协议,在 HTTP 头中有一个字段叫Referer,它记录了该 HTTP 请求的来源地址,因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。
2.在请求中添加token并验证,可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。