flask django 的 csrf对比

flask实现csrf:
在访问页面时,后台就会利用from flask_wtf.csrf import generate_csrf生成csrf,并且把他存储到cookie里。
csrf_token = generate_csrf()
response.set_cookie(‘csrf_token’, csrf_token)
生成的csrf会默认存到session中,存到redis里。
当用户post提交请求时,可以从cookie中拿到csrf信息设置到请求头中,发送给后台,
headers: {
“X-CSRFToken”: getCookie(“csrf_token”)
},
后台利用from flask_wtf.csrf import CSRFProtect进行验证
csrf = CSRFProtect()
这个函数会在session中和提交的请求头中获取2个csrf信息,然后比较是否通过。

而django实现csrf保护,首先需要打开中间件’django.middleware.csrf.CsrfViewMiddleware’,并且在模板中form提交时加上{% csrf_token %}
这回使模板添加了一个隐藏的input字段,name = ‘csrfmiddlewaretoken’,值就是对应的csrf的值,所以如果你想要动态向post请求,
csrf = $(‘input[name=”csrfmiddlewaretoken”]’).val()
params = {‘csrfmiddlewaretoken’:csrf}
params放到ajax中
当启用中间件并加入标签csrf_token后,会向客户端浏览器中写入一条Cookie信息,这条信息的值与隐藏域input元素的value属性是一致的,
提交到服务器后会先由csrf中间件进行验证,如果对比失败则返回403页面,而不会进行后续的处理。

你可能感兴趣的:(flask,django)