csrf cross-site request forgery attacks,

-csrf: Cross-site request forgery attacks (as well as additional xss, sql injection attacks)

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

In settings

- Enable global csrf verification

1.settings 打开'django.middleware.csrf.CsrfViewMiddleware',
2.表单中开启csrf_token
    <form>
        {% csrf_token %}
        <input type='text'>
    </form>

- partial opening function not validate 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验证   

- local verification function 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)
        }
    })

Guess you like

Origin www.cnblogs.com/zhuyuanying123--/p/11372804.html