Django中CSRF攻击原理及其防御方式
CSRF攻击原理(只正对POST请求方式):
- 登入正常网站之后,你的浏览器会保存sessionid,如果你没有退出
- 你不小心访问了另一个恶意网站,这个网站是模拟正常网站中修改密码的网站,且隐藏那些修改信息,可能只显示一张图片或者是一个按钮,你不小心点击这个按钮,那个这个按钮的action就是去访问正常网站的修改用户的界面的url并附带有修改密码的post表单,那么你的数据就会被修改。
Django防御csrf的方式:
- Django默认启动了csrf防护,在settins.py文件中MIDDLEWARE_CLASSES中的"django.middleware.csrf.CsrfViewMiddleware", 如果注释这行,表示关闭防御CSRF攻击,注意点: CSRF攻击只针正对post提交
- 表单提交数据时加上{% csrf_token %}标签
Django防御原理:
- 开启Django中CSRF防御,且在表单中添加{% csrf_token %}, 那么在渲染模板文件时在页面生成一个名字叫做csrfmiddlewaretoken的隐藏域。
- 服务器交给浏览器保存一个名字为csrftoken的cookie信息
- 提交表单时,俩个值都会发给服务器,服务器进行比较,如果一样,则csrf验证通过,否则失败