csrf能够成功的条件:
1).登陆正常网站之后,浏览器保存sessionId,没有退出
2).不小心访问了另外一个网站,并且点击了页面上的按钮
防御的原理:
1)渲染模板文件时在页面生成一个名字叫做csrfmiddlewaretoken的隐藏域
2)服务器交给浏览器保存一个名字为csrftoken的Cookie信息
3)提交表单时,两个值都会发给服务器,服务器进行比对时,如果一样,csrf验证通过,否则失败
1.login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登陆页面</title> </head> <body> <form method="post" action="/login_check"> 用户名:<input type="text" name="username" value="{{username}}"/><br/> 密码:<input type="password" name="password"/><br/> <input type="checkbox" name="remember"/>记住用户名<br/> <input type="submit" value="登陆"> </form> </body> </html>2.当输入用户名和密码后,提交时候显示403 Forbidden
3.解决办法,在post提交表单里面增加标签{% csrf_token %}