csrf跨域伪造攻击
Csrf跨域伪造攻击:使用当前浏览器还在生效状态的cookie对指定网站进行操作。最初针对的是银行网站的转账。
Django本身会对csrf进行校验,在django的1.4版本之前,csrf默认关闭,需要在settings当中手动开启,在1.4之后,默认开启
在django的任何post请求,都会在请求之初,给用户下发一下串用来校验身份的编码,并且每次请求不一样。
如果不加csrf_token校验,会发生csrf错误
使用django的csrf校验
1,返回post登陆页面的时候要用render方法,render方法和render_to_response方法的功能类似,但是会在第一个参数返回request,如果不返还,前端无法调用 {% csrf_token %}
def csrf_form(request):
# 判断请求的方法
if request.method=='POST':
# 接受前端post的参数
name = request.POST.get('username')
password = request.POST.get('password')
# 判断username和password有非空值
if name and password:
# 保存数据
user = FromExample()
user.name = name
user.password = password
user.save()
return render(request,'csrfForm.html',locals())
2,在form表单内部的第一行,插入csrf校验,使用{% csrf_token %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<p>
<label >用户名:</label>
<input type="text" name="username">
</p>
<p>
<label>密 码:</label>
<input type="password" name="password">
</p>
<p>
<input type="submit" value="提交">
</p>
</form>
</body>
</html>
{% csrf_token %}标签实际上就是在前端的form表单当中生成了一个hidden隐藏域,name为csrfmiddlewaretoken,value是csrf校验的值