-csrf:跨站请求伪造攻击 (额外还有xss,sql注入攻击)
Forbidden(403)拒绝你访问 比如说自己写的一个html页面 ,它认为你是伪造出来的,不是网站下面的页面 是因为你没有做csrf的判断和验证 你看到的这条信息,因为这个网站是需要csrf的cookie,cookie为什么被需要,是因为安全的因素,被第三方黑客攻击 Django解决 在提交时候 正常的页面 <form action='/url/',method='post'> {% csrf_token%} from:<input type='text'> to :<input type='text'> 按钮 </form> 添加{% csrf_token %} 通过验证 随机的生成一个cookie
在settings
-开启全局的csrf验证
1.settings 打开'django.middleware.csrf.CsrfViewMiddleware', 2.表单中开启csrf_token <form> {% csrf_token %} <input type='text'> </form>
-开启局部的函数,不进行f验证
1.settings 打开'django.middleware.csrf.CsrfViewMiddleware', 2.在views.py 中: from django.views.decoration.csrf import csrf_exempt @csrf_exempt def text(request): return .... 如上部分函数不用进行csrf验证
-局部函数进行csrf验证
1.sheetings 注释掉'django.middleware.csrf.CsrfViewMiddleware', 2.在views.py 中: from django.views.decoration.csrf import csrf_protect @csrf_protect def test(request): return ... 如上,部分函数需要进行csrf进行验证
-CBV
from django.utils.decoratos import method_decorator @method_decorator(csrf_protect,name='get') class Test(View): def get(self): pass def post(self): pass
-ajax
将token放置在请求头里面,携带过来 headers:{'X-CSRFToeken':token} token=$('input[name="csrfmiddlewaretoken"]').val() $.ajax({ type:'post', url:'/test/', data:{'name':xxx}. headers:{'X-CSRFToeken':token}, success:function(data){ console.log(data) } })