csrf跨站请求伪造攻击,

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

猜你喜欢

转载自www.cnblogs.com/zhuyuanying123--/p/11372804.html