zoukankan      html  css  js  c++  java
  • Django视图解决csrftoken认证

    CRSF介绍:

      CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

    CRSF攻击原理:

      

    预防CSRF攻击(这里只说token验证一种方法,其他方法请自行百度)

    token验证:

    (1)在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

    (2)token需要足够随机
    (3)敏感的操作应该使用POST,而不是GET,以form表单的形式提交,可以避免token泄露。

    在Django中怎么实现呢?

    1.在FBV中解决csrf认证:

      只需在函数加上@csrf_exempt

    from django.views.decorators.csrf import csrf_exempt
    
    @csrf_exempt
    def user(request):
        pass

    2.在CBV中解决csrf认证:

      -在dispatch方法中(单独方法有效)  @method_decorator(csrf_exempt)

      方式一:

    from django.views.decorators.csrf import csrf_exempt,csrf_protect
    from django.utils.decorators import method_decorator
    class ps(View):
        @method_decorator(csrf_exempt)
        def dispatch(self, request, *args, **kwargs):
            return super(ps,self).dispatch(request, *args, **kwargs)
        
        def get(self,request):
            return HttpResponse("GET2")
        def post(self,request):
            return HttpResponse("POST2")

      方式二:

    from django.views.decorators.csrf import csrf_exempt,csrf_protect
    from django.utils.decorators import method_decorator
    @method_decorator(csrf_exempt,name='dispatch')
    class ps(View):
        def get(self,request):
            return HttpResponse("GET2")
        def post(self,request):
            return HttpResponse("POST2")

    总结:CBV要解决(取消)csrf认证需通过以上方式执行

  • 相关阅读:
    python之常用模块
    python 正则
    python 二分法例子及冒泡排序
    python 基础之第十二天(re正则,socket模块)
    python获取系统信息psutil
    python 基础之第十一天(面向对象)
    python 基础之第十天(闭包,装饰器,生成器,tarfile与hashlib模块使用)
    python 基础之第九天
    python 基础之第八天--字典相关
    Python 爬虫监控女神的QQ空间新的说说,实现秒赞,并发送说说内容到你的邮箱
  • 原文地址:https://www.cnblogs.com/c-pyday/p/11157328.html
Copyright © 2011-2022 走看看