-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)
}
})