不会编程的小卜
人生没有白走的路,每一步都算数

Csrf

csrf中间件

  csrf跨站请求伪造

  Django框架中请求伪造保护机制

装饰器

from django.views.decorators.csrf import csrf_exempt,csrf_protect
  • csrf_exempt 加在视图上,表示当前视图不进行csrf校验
  • csrf_protect 加在视图上,表示当前视图进行csrf校验

注意点:

CBV情况,csrf_exempt装饰器要加在dispatch上

  • process_request(self, request):

    从cookie中获取csrftoken的值 —— 》 request.META['CSRF_COOKIE']

  • process_view:
  1. 判断视图是否加上csrf_exempt,
    1. 有就不在进行csrf校验
    2. 没有继续进行校验
  1. 判断请求方式是'GET', 'HEAD', 'OPTIONS', 'TRACE',
    1. 是的话,不进行校验
    2. 不是的话,进行校验

   3.进行校验的:

1、

csrf_token = request.META.get('CSRF_COOKIE')   #  csrf_token = cookie中获取csrftoken的值

2、

先尝试从request.POST获取csrfmiddlewaretoken对应的值
request_csrf_token = request.POST.get('csrfmiddlewaretoken', '')  # 获取隐藏标签的csrfmiddlewaretoken对应的值
再尝试从请求头中获取X-csrftoken的值
request_csrf_token = request.META.get(settings.CSRF_HEADER_NAME, '')

3、拿csrf_token和request_csrf_token 进行对比

  1. 对比成功,校验成功

  2. 对比不成功,校验失败,拒绝

 

posted @ 2019-06-02 12:57  不会编程的小卜  阅读(129)  评论(0编辑  收藏  举报