首页
学习
活动
专区
圈层
工具
发布

Django debug page XSS漏洞(CVE-2017-12794)分析

Django发布了新版本1.11.5,修复了500页面中可能存在的一个XSS漏洞,这篇文章说明一下该漏洞的原理和复现,和我的一点点评。...我们可以做个简单的测试,在Django命令行下,我们创建一个username为phith0n的用户,然后再次创建一个username为phith0n的用户,则会抛出一个IntegrityError异常:...这是为了方便开发者进行SQL错误的调试,因为Django的模型最终是操作数据库,数据库中具体出现什么错误,是Django无法100%预测的。...exc_value是上一个异常的说明,traceback是上一个异常的回溯栈。这个函数其实就是关联了上一个异常和当前的新异常。 最后,在500页面中,__cause__被输出。...那么,如果字段值中包含我们可控的字符串,又由于0x02中说到的,这个字符串其实就会被设置成__cause__,最后被显示在页面中。

1.9K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    django 1.8 官方文档翻译:6-3 Django异常

    Changed in Django 1.8: 之前的版本中,异常只在django.db.models.fields中定义,并不是公共API的一部分。...它会由以下原因造成: 模型中的字段与抽象基类中相同名称的字段冲突。 排序造成了一个死循环。 关键词不能由过滤器参数解析。 字段不能由查询参数中的关键词决定。 连接(join)不能在指定对象上使用。...exception InterfaceError exception DatabaseError exception DataError exception OperationalError exception IntegrityError...按照 PEP 3134,__cause__属性会在原生(底层)的数据库异常中设置,允许访问所提供的任何附加信息。...models.ProtectedError is a subclass of IntegrityError. Http异常 HTTP异常由django.http导入。

    2K20

    使用Django管理数据库表

    上节讲了如何利用Django建立自己的第一个网站 这节讲如何利用Django定义一个数据库的表并同步到MySQL中 最后讲述如何修改表结构 开发环境 操作系统:CentOS 7.3 Python版本 :...在后面的实例中会有介绍,它通过 类(class)的方式定义关系型数据库的表结构 首先看下整体的流程 ?...alertpath填写alert日志文件路径 content 填写该数据库用途 monitor_type,performance_type,hit_type 暂时不介绍,大家照写就行 unicode函数中tnsname...添加完成后可以看到我们添加的信息 可以看到显示的mesarch为tnsname,为在models.py的oracelist类中unicode处定义,大家可根据需要自己修改 修改表结构 从Django前几个版本开始支持自动处理表结构的更改...源码地址 源码请查看我的GitHub主页 https://github.com/bsbforever/wechat_monitor 今天介绍了介绍了如何利用Djnago创建一个MySQL的表以及如何修改它

    1.1K10

    08.Django基础六之ORM中的锁和事务

    Web应用中,常用的事务处理方式是将每个请求都包裹在一个事务中。...被atomic管理起来的代码块还可以内嵌到方法中。这样的话,即便内部代码块正常运行,如果外部代码块抛出异常的话,它也没有办法把它的修改提交到数据库中。     ...except IntegrityError: handle_exception() add_children()       这个例子中,即使generate_relationships...()中的代码打破了数据完整性约束,你仍然可以在add_children()中执行数据库操作,并且create_parent()产生的更改也有效。...尽量不要在atomic代码块中捕获异常 因为当atomic块中的代码执行完的时候,Django会根据代码正常运行来执行相应的提交或者回滚操作。

    2.6K40

    CVE-2021-35042Django SQL注入漏洞复现

    组件介绍 Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。...它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。...web服务也开启 docker-compose up -d #此时web服务器和数据库服务器均开启 进入web服务容器中 docker exec -it {container_id} /bin/bash...的文件下多了一个0001_initial.py的文件,查看这个文件内容,表示我们创建了一个User这个模型类,并且指出这个类的成员属性id,name,以及他们的属性,同时我们了解到djnago在models.py...创建模型类,其中一个模型类对应的是一张数据表,但是该命令并没有作用到数据库,这个命令中python manage.py makemigrations是记录我们对models.py的所有改动,并且将这个改动迁移到

    1.3K30

    如何判断目标站点是否为Django开发

    老文一篇,几个月以前发在【代码审计】小密圈里的文章,当时是写一个系列(Django安全漫谈),抽出其中的一部分,分享一下。 在黑盒测试的情况下,如何判断一个站是否是Django开发的?...有的Django站点会返回Server头: 虽然不能100%确定是Djnago,但范围就缩的很小了。 有些细节虽然不能100%确定是django,但多个细节组成在一起就可以基本确定了。...比如,Django输出的html中通常会有很多空白行,因为这些位置放的是逻辑语句,Django不像jinja2中会提供 {%- 这样清除空白行的方法: 再比如,Django默认找回密码的链接是 /password_reset...page=2 而不会是 /page/2/ ,表单输入框的id通常是 id_xxxx ,中文的情况下还会有一些特定的翻译语句,如 请上传一张有效的图片。您所上传的文件不是图片或者是已损坏的图片。...但这个方法有个局限,如果目标网站没有使用Django自带的django-admin(未将其包含在settings.py的INSTALLED_APPS中),就没有这个静态文件了。

    1.8K80

    Django新增数据

    :Django的一个model类对应数据库中一张表,而该类的对象则对应于数据表中的一条数据,这样的抽象是比较合理的。...因为在你调用 save() 之前,没有办法表中的 id 的值应该是多少,因为这个值是由你的数据库计算出来的,而不是由 Django 计算出来的。...save()方法也被用来更新数据,如前所述,如果你在保存新对象的时候指定了主键的值,如果这个值在数据库中已经存在,那么插入操作,就变成了更新操作。...Django 应用中每个模型拥有至少一个 Manager,就是默认的objects. 以上这些描述来自Django官方文档。...,而且如果这个值已经存在于数据库中,那么对 create() 的调用就会以一个 IntegrityError 失败,因为主键必须是唯一的。

    1.1K30

    Django数据库--事务及事务回滚

    数据库的读写操作中,事务在保证数据的安全性和一致性方面起着关键的作用,而回滚正是这里面的核心操作。Django的ORM在事务方面也提供了不少的API。...有事务出错的整体回滚操作,也有基于保存点的部分回滚。本文将讨论Django中的这两种机制的运行原理。...需要注意的是: 1. python代码中对Models的修改和对数据库的修改的区别,数据库层面的修改不会影响Models实例变量。...django.http import HttpResponse from index.models import Author,Count from django.db import transaction,IntegrityError...工作原理:savepoint通过对返回sid后面的将要执行的数据库操作进行计数,并保存在内置的列表中,当对数据库数据库进行操作时遇到错误而中断,根据sid寻找之前的保存点并回滚数据,并将这个操作从列表中删除

    4.4K10

    Python操作MySQL数据库

    在MYSQL中,运行INSERT INTO 插入语句中的字段是否一定要把该表的字段全部填上? 例如表tab_name有(col1,col2,col3,col4)4个字段。...connections.py", line 36, in defaulterrorhandler raise errorclass, errorvalue _mysql_exceptions.IntegrityError...AJ-MAN' for key 'PRIMARY'") 我们可以使用另外2个传入方法: ”INSERT IGNORE INTO 和 REPLACE INTO“: INSERT IGNORE会忽略数据库中已经存在的数据...这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的 REPLACE INTO 如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录。...column_type); 以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl: CREATE TABLE IF NOT EXISTS `runoob_tbl`( `runoob_id

    1.8K20

    python测试开发django-rest-framework-90.唯一字段校验UniqueValidator

    前言 接着前面ModelSerializer 反序列化的时候,写入到数据库时,有些字段是唯一的,不能重复写到数据库,如商品code,具有唯一性。...UniqueValidator UniqueValidator 是校验参数的唯一性,可以传一个queryset对象,也可以自定义message内容,以下是部分源码内容 class UniqueValidator...Content-Type: text/plain; charset=utf-8 X-Frame-Options: SAMEORIGIN Content-Length: 19853 Vary: Cookie IntegrityError.../v1/goods/ (1062, "Duplicate entry 'sp100104' for key 'goods_code'") 这说明goods_code 不能重复存到数据库,于是在反序列化的时候...,需校验goods_code 的唯一性 from rest_framework.views import APIView from rest_framework import serializers from

    1.6K30
    领券