zoukankan      html  css  js  c++  java
  • Django框架基础之XSS攻击和CSRF攻击

    xss攻击:
    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS
    恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用
    户的目的。

    解决方法:
            - 慎用 safe和mark_safe
            - 非要用,一定要过滤关键字

     1 class comment(View):
     2     def get(self,request):
     3         return render(request,'comment.html')
     4     def post(self,request):
     5         v=request.POST.get('content')
     6         if 'script' in v:
     7             return render(request,'comment.html',{'error':'小臂崽子还黑我'})
     8         else:
     9             msg.append(v)
    10             return render(request,'comment.html')
    11 
    12 class info(View):
    13     def get(self,request):
    14         # return render(request,'info.html',{'msg':msg})
    15 
    16         from django.utils.safestring import mark_safe
    17         temp="<a href='http://www.baidu.com'>百度</a>"
    18         newtemp=mark_safe(temp)
    19         return render(request,'info.html',{'newtemp':newtemp})
    View Code

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

    a. 基本应用
               form表单中添加
               {% csrf_token %}

    b. 全站禁用
                 # 'django.middleware.csrf.CsrfViewMiddleware',

    c. 局部禁用
                 'django.middleware.csrf.CsrfViewMiddleware',

                 from django.views.decorators.csrf import csrf_exempt

                 @csrf_exempt
                 def csrf1(request):

                       pass
    d. 局部使用
                  # 'django.middleware.csrf.CsrfViewMiddleware',

                     from django.views.decorators.csrf import csrf_exempt,csrf_protect

                     @csrf_protect
                     def csrf1(request):



    c. 特殊CBV
                     from django.views import View
                      from django.utils.decorators import method_decorator

                     @method_decorator(csrf_protect,name='dispatch')
                     class Foo(View):

                      def get(self,request):
                       pass

                      def post(self,request):
                      pass

    在Django框架中, 在开启了csrf验证服务后,必须在文档的form表单中获取随机码,form表单的内容才能提交


    用户使用get请求访问网页时,服务端会发送随机码到网页中当用户提交form表单,不仅会提交服务端生成的随机码,
    也会在cookie中生成一个CSRF键值对

    Ajax提交数据时候,携带CSRF:

                      a. 将CSRF放置在data中携带

     1 function foo(){
     2         var csrf=$('input[name="csrfmiddlewaretoken"]').val();
     3         var name=$('#user').val();
     4         $.ajax({
     5             url:'/bar.html',
     6             type:'POST',
     7             data:{ 'user':name,'csrfmiddlewaretoken':csrf},
     8             success:function (arg){
     9                 console.log(arg)
    10         }
    11         })
    12     }
    13 
    14 
    15 
    16 
    17 
    18 {% csrf_token %}
    19 <input id="user" type="text" name="user" />
    20 <input type="submit" value="提交"/>
    21 <a onclick="submitForm();">Ajax提交</a>
    View Code

                      b. 将cookie放在请求头中携带

     1 {% csrf_token %}
     2 <input type="text" id='user' name="user">
     3 <input type="submit" value="提交">
     4 <a onclick="foo()">ajax提交</a>
     5 
     6 
     7 function foo(){
     8     var token=$.cookie('csrftoken');
     9     var name=$('#user').val();
    10     $.ajax({
    11         url:'/bar.html',
    12         type:'POST',
    13         headers:{'X-CSRFToken':token},
    14         data:{ 'user':name},
    15         success:function (arg){
    16             console.log(arg)
    17     }
    18     })
    19 }
    View Code
  • 相关阅读:
    hduoj1285确定比赛名次
    HDU 1041 Computer Transformation 数学DP题解
    使用Git【转】
    Git-标签管理【转】
    Git-分支管理【转】
    Git-远程仓库【转】
    Git-时光穿梭【转】
    创建版本库【转】
    安装Git【转】
    Git简介【转】
  • 原文地址:https://www.cnblogs.com/liuguniang/p/7106223.html
Copyright © 2011-2022 走看看