XSS及CSRF的详细介绍

一、XSS

跨站脚本攻击(cross site scripting),为不和层叠样式表(cascading style sheets, css)的缩写混淆,故将跨站脚本攻击缩写为xss。恶意攻击者往web页面里插入恶意script代码,当用户浏览该页之时,嵌入其中web里面的script代码会被执行,从而达到恶意攻击用户的目的。

1. 工作流程

a. 恶意用户,在一些公共区域(例如,建议提交表单或消息公共板的输入表单)输入一些文本,这些文本被其它用户看到,但这些文本不仅仅是他们要输入的文本,同时还包括一些可以在客户端执行的脚本。如:

'Not Safe'

登录后复制

b. 恶意提交这个表单

c. 其他用户看到这个包括恶意脚本的页面并执行,获取用户的cookie等敏感信息。

XSS及CSRF的详细介绍

 

 

 2. 实例-未防范XSS攻击

XSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1 pinglu = []     # 评论列表 2  3 #提交表单 4 def commit(request): 5     if request.method == 'GET': 6         return render(request, 'commit.html') 7     else: 8         com = request.POST.get('commit') 9         pinglu.append(com)10         return redirect('/index.html/')11 12 13 #查看评论页面14 def index(request):15     return render(request, 'index.html', {'commit': pinglu})

登录后复制view.pyXSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1  2  3  4      5     Title 6  7  8 

评论

9 10 11 {{ error }}12 13 14

登录后复制commit.htmlXSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1  2  3  4      5     Title 6  7  8 

评论

9 {% for item in commit %}10
{{ item|safe }}
11 {# item后加safe,默认数据安全,django不会做特殊处理#}12 {% endfor %}13 14

登录后复制index.html

以上实例中,若在commit.html页面输入以下内容并提交:

 alert('恶意脚本') 

登录后复制

则会在index页面执行此行代码,弹出警告框(若包含恶意代码,则会执行)

XSS及CSRF的详细介绍

3. 防范XSS攻击

最直接的方法就是对于无法控制的输入在html页面内不要使用safe

{#    
{{ item|safe }}
#}
{{ item }}

登录后复制

也可以在views里进行过滤,防止特殊字符提交到数据库或网页内

def commit(request):if request.method == 'GET':return render(request, 'commit.html')else:        com = request.POST.get('commit')if '' in com:    # 过滤“”关键字,防止恶意代码的提交return render(request, 'commit.html', {'error': '此条评论有毒,已被和谐'})else:            pinglu.append(com)return redirect('/index.html/')

登录后复制

XSS及CSRF的详细介绍

 

二、CSRF

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

1. 工作流程

攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作:

 

XSS及CSRF的详细介绍

 2. django中如何防范

django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

全局:

启用中间件 django.middleware.csrf.CsrfViewMiddleware

 XSS及CSRF的详细介绍

局部:

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

登录后复制

@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件

@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

 3. django中的具体应用方法

form表单中添加{% csrf_token %}

若form表单中未添加{% csrf_token %},则会报403错误。

#settings.py中打开MIDDLEWARE设置'django.middleware.csrf.CsrfViewMiddleware',

登录后复制XSS及CSRF的详细介绍XSS及CSRF的详细介绍

1 from django.shortcuts import render, HttpResponse, redirect2 3 def csrf_test(request):4     if request.method == 'GET':5         return render(request, 'csrf_test.html')6     else:7         return HttpResponse('ok')

登录后复制views.pyXSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1  2  3  4      5     csef_test 6  7  8  9     10     11 12 13 14 

登录后复制csef_test.html

XSS及CSRF的详细介绍

修改csef_test.html:

XSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1  2  3  4      5     csef_test 6  7  8  9     {% csrf_token %}10     11     12 13 14 15 

登录后复制form表单中添加{% csrf_token %}

XSS及CSRF的详细介绍

全站禁用,即将settings.py中的 ‘django.middleware.csrf.CsrfViewMiddleware’ 注释掉即可

基于FBV视图的局部禁用和使用

XSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1 #settings.py 2 #启用 'django.middleware.csrf.CsrfViewMiddleware', 3  4  5 from django.views.decorators.csrf import csrf_exempt 6  7  8 @csrf_exempt 9 def csrf_test(request):10     if request.method == 'GET':11         return render(request, 'csrf_test.html')12     else:13         return HttpResponse('ok')

登录后复制局部禁用XSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1 #settings.py 2 #禁用 #'django.middleware.csrf.CsrfViewMiddleware', 3  4  5 from django.views.decorators.csrf import csrf_protect 6  7  8 @csrf_protect 9 def csrf_test(request):10     if request.method == 'GET':11         return render(request, 'csrf_test.html')12     else:13         return HttpResponse('ok')

登录后复制局部使用

 基于CBV视图的(只能局部使用或禁用类,不能在类方法里局部使用或禁用

XSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1 #settings.py 2 #禁用    'django.middleware.csrf.CsrfViewMiddleware', 3  4  5 from django.views import View 6 from django.views.decorators.csrf import csrf_protect 7 from django.utils.decorators import method_decorator 8  9 10 @method_decorator(csrf_protect, name='dispatch')11 class Foo(View):12     def get(self, request):13         pass14 15     def post(self, request):16         pass

登录后复制局部使用XSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1 #settings.py 2 #启用    'django.middleware.csrf.CsrfViewMiddleware', 3  4  5 from django.views import View 6 from django.views.decorators.csrf import csrf_exempt 7 from django.utils.decorators import method_decorator 8  9 10 @method_decorator(csrf_exempt, name='dispatch')11 class Foo(View):12     def get(self, request):13         pass14 15     def post(self, request):16         pass

登录后复制局部禁用

Ajax提交数据时,携带CSRF

XSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1  2  3  4      5     csef_test 6  7  8  9     {% csrf_token %}10     11 {#    #}12     Ajax提交表单13 14 15 16 17     function submitForm() {18             var csrf = $("input[name='csrfmiddlewaretoken']").val()19             var user = $("#user").val()20             $.ajax({21                 url: '/csrf_test.html/',22                     type: 'POST',23                     data: {"user": user, "csrfmiddlewaretoken": csrf},24                     success: function (arg) {25                             console.log(arg);26           }27             })28   }29 30 31 

登录后复制Ajax重写csrf_test,html,csrf数据存放于data中XSS及CSRF的详细介绍XSS及CSRF的详细介绍

 1  2  3  4      5     csef_test 6  7  8  9     {% csrf_token %}10     11 {#    #}12     Ajax提交表单13 14 15 16 {#专门处理cookie的插件,提取cookie字符串#}17 18 19 {#csrf数据放于data中#}20 {##}21 {#    function submitForm() {#}22 {#            var csrf = $("input[name='csrfmiddlewaretoken']").val();#}23 {#            var user = $("#user").val();#}24 {#            $.ajax({#}25 {#                url: '/csrf_test.html/',#}26 {#                    type: 'POST',#}27 {#                    data: {"user": user, "csrfmiddlewaretoken": csrf},#}28 {#                    success: function (arg) {#}29 {#                            console.log(arg);#}30 {#          }#}31 {#            })#}32 {#  }#}33 {##}34 35 {#csrf数据放于请求头中#}36 37     function submitForm() {38             var csrf = $.cookie('csrftoken');39             var user = $("#user").val();40             $.ajax({41                 url: '/csrf_test.html/',42                     type: 'POST',43                     headers: {'X-CSRFToken': csrf},44                     data: {"user": user},45                     success: function (arg) {46                             console.log(arg);47           }48             })49   }50 51 52 53 54 55 

登录后复制Ajax重写csrf_test.html,csrf数据存放于headers中

注意:{% csrf_token %}和cookie中的csrftoken值不一样。

form表单中的隐藏csrf_token

XSS及CSRF的详细介绍

 cookie中

 XSS及CSRF的详细介绍

以上就是XSS及CSRF的详细介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2269090.html

(0)
上一篇 2025年2月27日 11:02:17
下一篇 2025年2月27日 11:02:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Django自定义分页如何实现?

    这篇文章主要为大家详细介绍了django自定义分页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该显示在页面上的数据在数据库表中的起始位置。 确定分页需求:…

    2025年2月27日
    200
  • Cookie和Session的实例介绍

    一、Cookie cookie,有时也用其复数形式 cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。 1. 应用 服务器可以利用Cookies包含信息的任意性来筛选并经常性…

    2025年2月27日 编程技术
    200
  • Django中间件的详细介绍

     写了几周的脚本,今天终于开始接触web框架了~学习Python的web框架,那么Django就几乎是必修课了,这次的工作是先打打下手,主要的任务是在setting中添加版本号,在渲染静态css,js的路径时附带版本号,例如“example…

    2025年2月27日 编程技术
    200
  • 分享两种方法解决Form表单数据无法动态刷新的方法

    一、无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为“多对多” 1 from django.db import models 2 3 4 class Classes(models.Model): 5 ti…

    2025年2月27日 编程技术
    200
  • pycharm学习使用Django的图文实例教程

    开发框架流程 M V C(99%的开发都是这种流程。)1、URL控制器 2、Views 视图 3、models 库 1、首先创建一个Django 2、创建成功后里面几个模块的功能 用它来显示一个网页。3、在urls控制台设置属性,链接vie…

    2025年2月27日 编程技术
    200
  • 数据库数据转换成JSON格式实例详解

            最近打算搞一个自动化运维平台,所以在看django的知识。         在实际项目开发中,遇到一个小问题:前后端发生数据交互主流采用的是JSON。前端传数据到服务器端比较简单,稍微麻烦的是服务器端传JSON到前端。   …

    编程技术 2025年2月27日
    200
  • Django学习制作网页实例

    1.选择项目默认存放的地址 默认地址是C:UsersLee,也就是进入cmd控制台的地址,创建项目后命令 django-admin startproject project_test 默认地址就新建了一个项目文件夹。 项目包含一个manag…

    2025年2月27日 编程技术
    200
  • Ubuntu14.04的部署实例介绍

    第一步。 sudo apt-get update sudo apt-get upgrade 先更新。。 Django的主流部署方式:nginx+uwsgi+django 第二步,安装nginx sudo apt-get install ng…

    编程技术 2025年2月27日
    200
  • django通过类的方式实现通用视图

    这周是我入职的第一周,入职第一天看到嘉兴大佬的项目代码。视图中有类方法,我感到很困惑。 联想到之前北京融360的电话面试,问我有无写过类方法……看来有必要了解下视图的类方法,上网搜了很多,原来这就是所谓的“通用视图”。   上班是大小周,这…

    编程技术 2025年2月27日
    200
  • Django遇到的地雷,大家要注意

    最近在折腾django的wsgi应用,虽然django自带的runserver很方便,但是对于复杂的功能它就无能为力了。 首先在Windows上遇到坑了,然后在windows10自带的Ubuntu遇到坑了,最后在虚拟机上总算解决了。 从以前…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论