白帽子讲Web安全 -- 第四章 跨站点请求伪造(CSRF)

第四章 跨站点请求伪造(CSRF)

1. 什么是CSRF?

全名:Cross Site Request Forgery, 中文名:跨站点请求伪造。

2. CSRF可以做什么?

攻击者盗用了你的身份,以你的名义发送恶意请求。

3. GET类型的CSRF

只需要一个HTTP请求,就可以构造一次简单的CSRF。

示例:

银行网站A,它以GET请求来完成银行转账的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000

危险网站B,它里面有一段HTML的代码如下:


  
  首先,你登录了银行网站A,然后访问危险网站B,噢,这时你会发现你的银行账户少了1000块......

为什么会这样呢?原因是银行网站A违反了HTTP规范,使用GET请求更新资源。在访问危险网站B的之前,你已经登录了银行网站A,而B中的以GET的方式请求第三方资源(这里的第三方就是指银行网站了,原本这是一个合法的请求,但这里被不法分子利用了),所以你的浏览器会带上你的银行网站A的Cookie发出Get请求,去获取资源http://www.mybank.com/Transfer.php?toBankId=11&money=1000 ,结果银行网站服务器收到请求后,认为这是一个更新资源操作(转账操作),所以就立刻进行转账操作......

4. POST类型的CSRF

攻击者可以使用JavaScript构造表单。
栗子略。

5. 如何防御CSRF
  • 验证码

    • 在表单中增加一个随机的数字或字母验证码,通过强制用户和应用进行交互,来有效地遏制CSRF攻击。
  • Referer Check

    • 检查如果是非正常页面过来的请求,则极有可能是CSRF攻击。
  • Anti CSRF TOKEN

    • 在请求的参数里增加一个随机的参数token,token只能服务器和客户端知道,不能有第三方知道。
    • token需要足够随机
    • 敏感的操作应该使用POST,而不是GET,以form表单的形式提交,可以避免token泄露。

你可能感兴趣的:(白帽子讲Web安全 -- 第四章 跨站点请求伪造(CSRF))