Django 框架CSRF 防御实现机制浅析
2021-04-24
(国防大学教研保障中心 北京 100091)
CSRF 攻击是一种常见的Web 攻击方式,随着Web 安全技术的发展,各类Web 后端框架,如Laravel、Express、Spring Boot、Django等,都内置了CSRF 的防御功能。本文以Django 框架为例,分析其CSRF 防御实现机制。
1 CSRF 攻击
CSRF(Cross-site request forgery,跨站请求伪造)是指攻击者伪装受信用户的请求,在受信网站上执行被攻击者非本意操作的攻击方法。攻击者使用CSRF 可以利用你的名义发送邮件消息、盗取账号、购买商品、虚拟货币转账等恶意操作,造成个人隐私泄露以及财产损失。
1.1 CSRF 攻击原理
http 协议是无状态的,如一个Web 客户连续获取一个需要认证访问的Web 服务器上的信息,可能需要反复进行认证。为了解决这个问题,人们设计了一种得到广泛应用的Cookie 机制。Cookie 一般由服务器生成,发送给浏览器,浏览器会将Cookie 的值保存到文本文件中,下次请求同一网站时就发送该Cookie 给服务器,从而实现保存客户与服务器之间的状态信息。
Cookie 最典型的应用就是判定注册用户是否已经登录,CSRF 就是通过利用已登录用户的Cookie 状态信息,伪装成受信任用户的请求而实现攻击的。例如用户A 登录了受信任站点B,用户A 登录信息验证通过以后,站点B 会在返回给用户A 浏览器的信息中带上已登录的Cookie 信息;用户A 在未清除登录站点B 的Cookie 或Cookie未到期情形下,访问恶意站点C;恶意站点C 的某个页面在返回给用户A 的数据中带有向站点B 发起的恶意请求,此时用户A 会自动向B 站点发出请求;站点B 根据用户A 请求所带的Cookie,判断此请求为受信用户A 所发送的。至此,恶意站点C 就达到了伪造用户A 请求的目的。……
