Django 如何防止跨站请求伪造(CSRF)攻击?
理解 Django 的 CSRF 防护机制
跨域请求伪造(CSRF)攻击是一种攻击者的网站诱骗受害者浏览器向受信任的网站发出未经授权的请求的攻击方式。为防止此类攻击,Django 引入了 CSRF 保护机制。
Django CSRF 的原理
Django CSRF 保护机制本质上是一个检查浏览器请求中两个令牌是否匹配的过程:
当浏览器发送请求时:
- Django 服务器提取请求头 cookie 中的 csrftoken 和请求正文中的 csrfmiddlewaretoken。
- Django 服务器将这两个令牌进行比较。如果它们匹配,则请求被视为合法。
解决跨站攻击问题
跨站攻击之所以无效,是因为攻击者无法访问:
即使攻击者能够获得或填充两个令牌,它们也不匹配,因为 csrfmiddlewaretoken 是可变的,因此无法防范 CSRF 攻击。
浏览器跨域限制与 Django CSRF
浏览器确实实施了跨域限制,这意味着攻击者的网站无法向受信任的网站发起直接请求。但是,CSRF 攻击是通过受害者的浏览器进行的,浏览器不会阻止受害者的跨域请求。因此,Django 的 CSRF 保护机制提供了一层额外的保护,确保攻击者的网站不能利用受害者的浏览器发起恶意请求。