• Django之CSRF问题


    1、csrf全称:cross site request forgery(跨站请求伪造),举例来讲,一个安全的网站A,一个恶意网站B,当你在A网站进行了登录后,这时候浏览器会保存你的cookie和session相关信息,然后,当你访问B网站时,你点击了一个指向A网站的链接,这个链接就会带着你的cookie和session向A发送请求,就可能造成无法想象的后果了。

    2、防止这一攻击的方式一般有两种:一种是Challenge-Response的方式,例如通过Captcha和重新输入密码等方式来验证请求是否伪造,但这会影响用户体验,类似银行付款会采用这样的方式。另一种是通过随机Token的方式,多数Web系统都会采用这种方式。django采用的就是这种方式。

    3、django会在用户提交的表单里添加一个csrftoken隐含值,使用这一方式的具体原理如下:

      1)在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,其值是在服务器端随机生成的,每一次提交表单后又会生成不同的值;

      2)当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,来判断用户的合法性;

      3)当用户被csrf攻击从其他站点发送精心编制的攻击请求时,由于其站点不可能知道隐藏的csrftoken字段的信息这样在服务器端就会校验失败,攻击被成功防御;

    4、csrf装饰器的使用

    from django.views.decorators.csrf import csrf_exempt,csrf_protect
    # @csrf_protect #需要走csrf验证
    # @csrf_exempt  #不需要走csrf验证
    
    # 给CBV加装饰器
    from django.views import View
    from django.utils.decorators import method_decorator
    
    # 方式一:使用method_decorator
    class StudentsView(View):
    
        @method_decorator(csrf_exempt)
        def dispatch(self, request, *args, **kwargs):
            return super(StudentsView, self).dispatch(request, *args, **kwargs)
    
        def get(self, request, *args, **kwargs):
            print('get方法')
            return HttpResponse('GET')
    
        def post(self, request, *args, **kwargs):
            return HttpResponse('POST')
    
    
    #方式二:给类加装饰器,name标明要装饰的函数
    @method_decorator(csrf_exempt,name='dispatch')
    class ClassView(View):
    
        def dispatch(self, request, *args, **kwargs):
            return super(ClassView, self).dispatch(request, *args, **kwargs)
    
        def get(self, request, *args, **kwargs):
            print('get方法')
            return HttpResponse('GET')
    
        def post(self, request, *args, **kwargs):
            return HttpResponse('POST')
  • 相关阅读:
    alias这个命令还是很有用的
    为什么不推荐用破解版的winrar
    chrome headless
    关于PDF的一些书籍
    PDF的一些工具
    3DPDF是个什么东西?
    你可能不知道的pdf的功能
    为什么一些公司把dwg文件转化为pdf
    关于pdf阅读器的选择
    接外包怎么保护自己的作品
  • 原文地址:https://www.cnblogs.com/value-code/p/8510414.html
Copyright © 2020-2023  润新知