作为铁杆Django用户,发现昨天Django进行了更新,且修复了一个SQL注入漏洞。在我印象里这应该是Django第一个SQL注入漏洞,且的确是可能在业务里出现的漏洞,于是进行了分析。...在Django中也支持了Postgresql的数据类型: JSONField ArrayField HStoreField 这三种数据类型因为都是非标量,且都能用JSON来表示,我下文就用JSONField...我们可以很简单地在Django的model中定义JSONField: from django.db import models from django.contrib.postgres.fields import...).all() JSONField的强大让我们能灵活地在关系型数据库与非关系型数据库间轻松地切换,因此在我们的很多业务中都会使用到这个功能。...原因是,Django-Admin中就支持用户控制queryset的查询键名,我在2017年在微博中说到过这一点,不过当时没有测过JSONField,sad。 ?
0x01 漏洞概述 ---- 该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。...Django通常搭配postgresql数据库,而JSONField是该数据库的一种数据类型。...该漏洞的出现的原因在于Django中JSONField类的实现,Django的model最本质的作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单的字符串拼接。...通过JSONField类获得KeyTransform类并生成sql语句的位置。...0x04 漏洞利用 ---- 通过对代码的分析,可以知道如果在你的Django中使用了JSONField并且查询的“键名”可控,就可以进行SQL注入 访问http://ip:8000/admin 输入用户名
(3, 'VIP')) creator = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='创建人', blank=True, null...=True) company_code = models.CharField('公司码', max_length=20, blank=True, null=True) def __unicode...补充知识:django 扩展自带权限,使其支持对象权限 扩展django 自带权限 说明 在不重写 自带权限的基础上,完成支持对象权限,适用于小型项目。...欢迎提出修改意见 软件支持 jsonfield 数据库 新建3个表 from django.db import models from django.contrib.auth.models import...AbstractUser, Group ,User from jsonfield import JSONField class Request(models.Model): request
Django是啥就不多介绍了,直接步入正题吧 Django debug page XSS 漏洞编号:CVE-2017-12794 该漏洞利用版本需小于1.11.5以下(在1.11.5以上已修复漏洞)。...在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞,这里简单演示下吧!搭建环境,直接开干!...Django JSONField/HStoreField SQL注入漏洞 漏洞编号:CVE-2019-14234 开发者在Django中使用了JSONField/HStoreField,且用户可控queryset...在Django 3.0.3版本以下的GIS查询功能模块(GPS定位相关模块)中存在的SQL注入漏洞,其产生漏洞的原因是GIS的聚合查询功能中,用户在oracle的数据库且可控tolerance变量,并且要命的是未对该变量做任何的用户输入检查...id=-1 union select null,null,null from dual --+ # 获取信息 ?
的类型 有时候希望它简单一点 有时候希望它坚持自我 多对多和 values() ORM 终究只是 ORM 隐式转换 Mysql 低版本时间精度问题 虚假的 .query 天使的眼泪 巧用 extra JsonField...from django.db import connection # 在语句提交之后,立即打印 # 同时需要记得开启 DEBUG = True print(connection.queries) 再或者...,在数据量较大时有比较好的效果,比如: queryset = queryset.extra(select={'username': "CONCAT(username, '@', domain)"}) 在模糊查询时...username 内容转义 Entry.objects.extra(where=['headline=%s'], params=[username]) JsonField 的福音—— JSON_SEARCH...所以还是一个道理,把这个逻辑交给 DB select * from profiles_profile where JSON_SEARCH(extras, "one", "aaa") is not null
查看@JSONField注解的源码可以了解到它的作用范围是在方法(METHOD)、属性(FIELD)、方法中的参数(PARAMETER)上。...; public class User { @JSONField(name="new_username") private String username; @JSONField...通常情况下如果一个 字段的属性值为null时序列化或者反序列化的时候是不会将该字段输出的; 那么我们有没有办法来控制呢?...答案是可以的; 我们可以通过serialzeFeatures、parseFeatures的属性值SerializerFeature.WriteMapNullValue来控制,当属性的值为null时也输出该字段...,字段的值为null。
所有从GeoJSON导入的GEOSGeometry拥有SRID集合; 添加OSMWidget.default_zoom属性,用于自定义地图的默认缩放级别; metadata现在是可读可编辑的; 允许在GDAL...现在支持fastupdate和gin_pending_list_limit参数; 新的GistIndex类允许在数据库中创建GiST索引; inspectdb现在可以内省JSONField和RangeFields...Form.errors.get_json_data()方法返回字典类型的表单错误,以适应JSON类型x响应; Generic Views通用视图 新的ContextMixin.extra_context属性允许在View.as_view...,现在它将返回配置在TEMPLATES中的多个DjangoTemplates引擎中的第一个,而不是弹出ImproperlyConfigured错误; 自定义模版标签现在接收强制关键字参数; Tests测试...为LiveServerTestCase添加多线程支持; Validators验证器 新的ProhibitNullCharactersValidator不允许CharField及其子类的表单输入为空;
@jsonfield 看源码它可以作用于字段和方法上。 引用网上说的, 一、作用field @jsonfield作用在field时,其name不仅定义了输入key的名称,同时也定义了输出的名称。...但是我在使用中,发现并不如上所说。...fastjson的版本是1.1.15 二、作用在setter和getter方法上 这种方式倒是在使用的过程当中符合期望。...•serialize和deserialize是布尔类型的,用法为 @jsonfield(serialize=false) private long projectid 就是在序列化的时候就不包含这个字段了...) private string value; 这样当value的值为null的时候,依然会把它的值序列化出来。
我们知道,在 MyBatis 中直接 DTO 映射查询的时候,写起来非常简单。...= null @JSONField(name = "app_name") var appName: String? = null var owner: String?...= null @JSONField(name = "need_optimize_slow_sql_count") var needOptimizeSlowSqlCount: Int?...= null @JSONField(name = "slow_template_count") var slowTemplateCount: Int?...= null @JSONField(name = "slow_sql_count") var slowSqlCount: Int?
"Django 的鸡与蛋问题"通常指的是在开始 Django 项目时,你可能会遇到的一个困境:是先设计数据库模型还是先编写视图和控制器(即视图函数)?...这个问题的实质是在于,Django 的核心部分是由数据库模型(模型层)、视图(视图层)和控制器(控制器层,通常用视图函数实现)组成的。...1、问题背景在构建一个应用程序时,需要发送一个 API 调用并保存结果信息,同时在保存之前对信息进行处理。...save() 方法class APIRecord(models.Model): data = models.JSONField() def save(self, *args, **kwargs...class APIRecord(models.Model): data = models.JSONField() def make_api_call(self): # 调用
fastMediaTypes = new ArrayList(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); //4.在convert...jsonField = field.getAnnotation(JSONField.class); if (jsonField !...= null && !...= null && FastJsonUtil.checkDate2Json(key)) { String format = FastJsonUtil.getDate2JsonFormat...fastMediaTypes = new ArrayList(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); //4.在convert
FastJson中@JSONField注解使用 我们通常使用json格式在服务器之间进行数据传输。...由于json中的key与bean中的属性不能匹配,通常的转换会出现了部分属性为null的情况。 这种情况,我们可以使用@JSONField。...@JSONField的作用对象: Field Setter 和 Getter方法 注:FastJson在进行操作时,是根据getter和setter的方法进行的,并不是依据Field进行。...public void job() { String json = PmHitchClient.queryHitchOnline(); List list = null...@Override public void save(Hitch record) { Long hid = record.getHitchId(); if(null
真正的快乐是内在的,它只有在人类的心灵里才能发现。...private String json; } 然后再次运行可以看到我们序列化后的JSON串属性顺序按照升序排序了 接下来是name 它可以指定我们序列化/反序列化属性的名称 我们在name上加一个...反序列化时会忽略该属性 然后是serialzeFeatures,它的值为com.alibaba.fastjson.serializer.SerializerFeature 可以指定一些序列化的选项,例如我们值为null..., Object fieldName, Type fieldType, int features) throws IOException { Integer genderCode = null...Arrays.stream(GenderEnum.values()).filter(gender -> gender.getCode().equals(genderCode)).findFirst().orElse(null
最近做项目中,使用了json格式在服务器之间进行数据传输。但是发现json格式数据不符合JAVA中的变量定义规则,并且难以理解,因此需要在后台中做二次处理,将数据处理成我们系统中定义的格式。...由于json中的key与bean中的属性不能匹配,因此在转换过程中出现了部分属性为null的情况。经过查看官方文档,发现可以使用@JSONField进行解释,但是并没有详细的使用说明。...Setter 和 Getter方法 注:FastJson在进行操作时,是根据getter和setter的方法进行的,并不是依据Field进行。...desc":"只是一个测试","name":"xianglj"} 需要转换的json:{"AGE":"20","DESC":"只是一个测试","NAME":"XIANGLJ"} json to bean:null...当作用在getter上时,在bean转换为json时,其key值为name定义的值。
ValueFilter的作用是在序列化之前对一些参数值做一些后置处理。...ContextValueFilter extends SerializeFilter 在某些场景下,对Value做过滤,需要获得所属JavaBean的信息,包括类型、字段、方法等。...在fastjson-1.2.9中,提供了ContextValueFilter,类似于之前版本提供的ValueFilter,只是多了BeanContext参数可用。...一个简单的使用就是 @JSONField(name = "abc"), 序列化和反序列话讲使用abc这个字段, 否则会使用成员变量的名字 举例JSONField(name = "DATE OF BIRTH...注意:FastJson 在进行操作时,是根据 getter 和 setter 的方法进行的,并不是依据 Field 进行。建议正常情况下选取注解field上即可. 不要两种都选取.
fieldAnnotation = null; if(field !...= null){ fieldAnnotation = TypeUtils.getAnnotation(field, JSONField.class);...= null){ if(!...4.2 使用别名 使用 fastjson 自带的 @JSONField 注解,不过这种方式 fastjson 的侵入性太强。...然而推荐很多次《阿里巴巴 Java 开发手册》虽然很薄,但是很多人还是不会认真阅读几遍,导致在相同的地方跌倒很多遍。哪怕遇到类似的问题,也很容易快速想出原因。
最近重操 CRUD 旧业,又有一些新的发现,故增加一篇 Django ORM:天使与魔鬼 Part II。...在 Django 中我们通常会使用 selected_related 或prefetch_related 来预取关联对象,来减少和 DB 之间的交互,但是在使用上也需要有一些注意的地方。...class Baz(models.Model): """A very large table""" foo = models.ForeignKey(Foo) 我们在查询 Foo 时,会尝试预取关联字段以加速后续数据读取...,但如果我们在调用时不加任何参数:Foo.objects.all().prefetch_related() ,默认地 Django 会将所有关联字段都取出来,加入 Baz 表无比巨大,本来用作性能优化的...class Baz(models.Model): bar = models.ForeignKey(Bar, related_name="bazs") large_config = models.JSONField
但是目前用到的Gson在序列化JSON时很慢,在读取解析这些必要的配置文件时性能不佳,导致卡顿启动速度减慢等问题。 Gson的问题在哪里呢?...那么有没有一种方式在使用时和Gson一样简单且性能又特别好呢? 我们调研了Java的AnnotationProcessor(注解处理器),它能够在编译前对源码做处理。...在Bean上加注解 @JsonTypepublic class Bean { public String name; public int age; @JsonField("_desc...") public String description; //使用JsonField 标注字段在json中的key public transient boolean state; //...目前我们已经有好多性能要求比较高的地方在使用,可以大幅的降低JSON的序列化时间。
; } 补充说明 逻辑删除:逻辑删除的本质是修改操作,所谓的逻辑删除其实并不是真正的删除,而是在表中将对应的是否删除标识做修改操作;比如 0 是未删除,1 是删除;在逻辑上数据是被删除的,但数据本身依然存在库中...编写 `CourseServlet` 在 CourseServlet 中添加 findCourseList 方法。...= null && !"".equals(courseName)) { stringBuffer.append(" AND course_name LIKE ?")...= null && !"".equals(status)) { stringBuffer.append(" AND `status` = ?")...2、在 webapps 中创建 upload 目录;upload 目录专门用来保存上传过来的图片。
Text :类对应 Json 的示例数据•null-able :是否空安全,不勾选生成的字段都为非空类型,勾选以后生成的字段则全为可空类型 在该界面填入要创建 Class 的名称以及对应类的 Json...在转换上加了 try-catch 如果报错则返回空的 List。..., 为 null 则直接返回 null。...2.3 JSONField 的使用 自定义字段名 实际开发中可能会存在 Json 数据字段与代码中的字段不一致的情况,比如 Json 中的字段命名不符合代码规范,这个时候就可以使用 JSONField...(deserialize: false) 时即使 Json 数据有该字段也不会进行解析,打印字段值为 null ,同样的如果设置 @JSONField(serialize: false) 时,当调用 toJson
领取专属 10元无门槛券
手把手带您无忧上云