Django 的 CSRF(Cross-Site Request Forgery)保护机制通过使用两个 CSRF Token 来有效防止跨站攻击。这两个 Token 分别是:
当 Django 渲染一个包含表单的页面时,它会自动在表单中插入一个隐藏的 CSRF Token。这个 Token 是一个随机生成的字符串,通常通过 {% csrf_token %}
模板标签插入到表单中。例如:
<form method="post">
{% csrf_token %}
<input type="text" name="username">
<input type="submit" value="Submit">
</form>
在提交表单时,这个 Token 会随着表单数据一起发送到服务器。
Django 还会在用户的浏览器中设置一个名为 csrftoken
的 Cookie。这个 Cookie 也包含一个随机生成的字符串,但与表单中的 CSRF Token 不同。
当用户提交表单时,Django 会执行以下步骤来验证 CSRF Token:
csrftoken
Cookie 进行比较。CSRF 攻击的原理是攻击者诱使用户在不知情的情况下提交恶意请求。由于浏览器会自动发送 Cookie,攻击者可以利用这一点伪造请求。
Django 的 CSRF 保护机制通过以下方式防止这种攻击:
csrftoken
Cookie,因为浏览器遵循同源策略,不会让恶意网站访问到该 Cookie。因此,攻击者无法伪造一个包含有效 CSRF Token 的表单。Django 的 CSRF 保护机制通过表单中的 CSRF Token 和 Cookie 中的 CSRF Token 双重验证,确保只有合法的请求才能被处理。这种机制有效地防止了跨站请求伪造攻击,保护了用户的数据安全。