django之orm的高级操作以及xcc安全攻击
查询用法大全:
1. 比较运算符
# id > 3 res = models.UserInfo.objects.filter(id__gt=3) # id >= 3 res = models.UserInfo.objects.filter(id__gte=3) # id < 3 res = models.UserInfo.objects.filter(id__lt=3) # id <= 3 res = models.UserInfo.objects.filter(id__lte=3) # id != 3 res = models.UserInfo.objects.exclude(id=3) # id = 2 and name = "zekai" res = models.UserInfo.objects.filter(id=2,name="zekai")# or from django.db.models import Q res = models.UserInfo.objects.filter(Q(id__gt=3|Q(name='zekai')))
2. 身份运算符 in ,not in
in res = models.UserInfo.objects.filter(id__in=[2,3,4])not in res = models.UserInfo.objects.exclude(id__in=[2,3,4])
3. between...and
res = models.UserInfo.objects.filter(id__range=[1,2,3,4])
4. like
# 以'ze'开头 res = models.UserInfo.objects.filter(name__startswith='ze')# g: 全局 global i:忽略大小写 ignore 以ze开头,且忽略大小写 res = models.UserInfo.objects.filter(name__istartswith='ze')# 以'ze'结尾 res = models.UserInfo.objects.filter(name__endswith='ze')res = models.UserInfo.objects.filter(name__iendswith='ze')# 包含ze的 res = models.UserInfo.objects.filter(name__contains='ze') res = models.UserInfo.objects.filter(name__icontains='ze')
5. count
res = models.UserInfo.objects.filter(id__gt=3).count()
6. order by。
# 数据以id升序 res = models.UserInfo.objects.all().order_by('id')# 数据以id降序 res = models.UserInfo.objects.all().order_by('-id')# 数据以id降序,id相同的话 以age升序 res = models.UserInfo.objects.all().order_by('-id','age')
7. group by
# 导入模块 from django.db.models import Avg, Sum, Max, Min, Count# res = models.UserInfo.objects.values("name").annotate(s=Sum('age'))res = models.UserInfo.objects.values("name").annotate(s=Sum('age')).filter(s__gt=50)
8. limit
# 从第10行开始取,取到20行 all()就是一个列表。因此[10:20]就是一个切片 res = models.UserInfo.objects.all()[10:20]
9. last
# 取最后一行数据 res = models.UserInfo.objects.last()
10. only
# 仅取name这列数据,(id默认会被取进去) res = models.UserInfo.objects.only('name')
11. defer
# 排除name这列数据,其他列的数据都会取进去,(id默认会被取进去) res = models.UserInfo.objects.defer('name')
12. F(批量操作列的数据)
from django.db.models import F # 对UserInfo表中age列的所有数据 加 1 res = models.UserInfo.objects.update(age=F('age')+1)
13. 原生的sql
1. 使用extra方法
''' 解释:结果集修改器,一种提供额外查询参数的机制 说明:依赖model模型 ''' 用在where后:Book.objects.filter(publisher_id="1").extra(where=["title='python学习1'"]) 用在select后 Book.objects.filter(publisher_id="1").extra(select={"count":"select count(*) from hello_book"})
2. 使用raw方法
''' 解释:执行原始sql并返回模型 说明:依赖model多用于查询 ''' # 用法: book = Book.objects.raw("select * from hello_book") for item in book:print(item.title)
3. 执行自定义SQL
''' 解释:利用游标执行 导入:from django.db import connection 说明:不依赖model '''# 用法:from django.db import connection cursor = connection.cursor() #插入 cursor.execute("insert into hello_author(name) values('xiaol')") #更新 cursor.execute("update hello_author set name='xiaol' where id=1") #删除 cursor.execute("delete from hello_author where name='xiaol'") #查询 cursor.execute("select * from hello_author") #返回一行 raw = cursor.fetchone() print(raw) #返回所有 cursor.fetchall()
14. distinct
安全攻击
一、xss
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。也属一种注入攻击,注入本质上就是把输入的数据变成可执行的程序语句比如这些代码包括HTML代码和客户端脚本。
二、危害
- 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
- 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
- 盗窃企业重要的具有商业价值的资料
- 非法转账等
三、原理:
1、反射型xss攻击
一般的浏览器与服务器交互都是,客户端向服务器发送一条请求,类似http://www.bigshop.com/product/list/?q=手机,也就是说客户向目标站点发送了一条查询所有手机的请求,然后服务器向客户端返回相关数据,这是正常的。并且手机这一关键词也会被重新返回给浏览器端的用户,这就使得xss攻击有机可乘。黑客将http://ww.bigshop.com/product/list/?q=这条包含恶意脚本的链接通过某种方式发送给用户,那么用户一旦点击这条链接,就会向目标站点发送查询的请求,这当然是查询不到任何结果,但是这段JavaScript的脚本就会从后台转了一圈又回到浏览器,这样浏览器就会执行这段代码,也就是是获取用户的cookie值。一旦黑客拿到你的cookie值,基本上就相当于可以模拟你的身份。 可以看到,攻击者巧妙地通过反射型XSS的攻击方式,达到了在受害者的浏览器上执行脚本的目的。由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作用,这也是它被称为非持久型XSS的原因。
2、存储型xss攻击
存储型xss攻击与反射型xss攻击的区别在于,xss攻击已经存储在服务器的数据库上,可以长期的返回给浏览器端。例如当客户A在博客园的博客或者评论区写入一段js恶意脚本,这段脚本就会永久存储到博客园的数据库,一旦当有其他用户请求查看这条博客或者评论,博客园就会将相应的数据返回给用户,当然这段js恶意脚本也会被返回给用户的浏览器并执行。
四、防护
- 字符过滤:对用户的请求无论是url还是表单提交的内容都进行长度检查和对特殊字符进行过滤
- cookie方面:避免在cookie中放入重要敏感信息
- 表单提交:尽量使用post的方式提交表单而不是get方式
不仅服务器拿到用户的请求进行过滤,在服务器将数据返回给浏览器后,浏览器也会再一次进行防护。
五、在django中我们应该如何防护?
django已经为我们做好了防护,因此我们不需要对其进行处理。另外如果我们解除django的防护措施,只需要在展示用户信息时,使用{{ 展示信息 | safe }}
步骤1:
步骤2:
步骤3:
步骤4:
步骤五:
步骤6:
防止XSS攻击
Xss攻击就是有人在页面的输入框输入一些可以执行的html代码,例如利用一些模块语言让html文件无限循环弹出窗口等.
Django自带了预防xss攻击的代码,如果想让它不防止就加“|safe”
六、其他攻击
csrf攻击
sql攻击
Django实现修改列明的方法有两种:
方法1: annotate
方法2: extra
转载于:https://www.cnblogs.com/plf-Jack/p/11355524.html
django之orm的高级操作以及xcc安全攻击相关推荐
- Django工程-ORM模型数据库操作详解(六)
Django工程-ORM模型数据库操作 下面以用户和图书表模型进行ORM的基本操作使用 ORM模型介绍 1.增加 通过模型类.objects.create()保存. >>> User ...
- python——Django(ORM连表操作)
千呼万唤始出来~~~当当当,终于系统要写django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...
- Django之ORM其他骚操作
Django ORM执行原生SQL # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, where=None, params=None, ...
- 批量模糊查询_Django之ORM表高级操作、增删改查、F/Q查询等
目录 一.如何开启自己的测试脚本? 二.对表数据的添加.更新.删除1.create()变态操作之批量插入数据2.update()3.delete()4.如何查看QuerySet对象执行的sql语句?5 ...
- Django之ORM对数据库操作
基本操作 <1> all(): 查询所有结果<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象<3> get(**kwargs): 返回 ...
- django mysql orm教程_带你了解Django ORM操作(基础篇)
前言 在日常开发中,需要大量对数据库进行增删改查操作. 如果头铁的话,使用原生SQL是最好的,毕竟性能又高,又灵活. 但是通常情况下,我们不是太需要那么苛刻的性能,也没有那么多刁钻的需求用原生SQL ...
- 【Django】ORM操作#2
目录 必知必会的13条查询方法 单表查询之神奇的双下划线 一对多 ForeignKey 多对多 ManyToManyField 在Python脚本中调用Django环境 Django终端打印SQL语句 ...
- day55 django 模型层,orm连表操作
设计表 django之orm详解: https://www.cnblogs.com/komorebi/p/11551089.html 在django中设计表 1.先在navicat中建好一个库 2.更 ...
- 西游之路——python全栈——Django之ORM操作
Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...
最新文章
- 是时候搞清楚 Spring Boot 的配置文件 application.properties 了!
- [零基础学JAVA]Java SE面向对象部分-10.面向对象基础(05)
- 基于依存句法分析的关键短语抽取算法实战
- python编写统计选票的程序_使用python编写微信公众号发稿统计程序
- F - Colorful Tree(LCA,树上差分,离线处理)
- 微信小程序简单入门1
- find命令批量修改权限和用户和删除指定时间文件
- 海思 截图显示_三星Note10+5G国行跑分达到45万,华为海思麒麟990压力大不大?
- Windows Server 2008 计划任务配置(任务计划程序)每分钟执行BAT
- 【作业报告】作业5 四则运算 测试与封装 5.2(已更新)
- 滴滴开源 ​DoraemonKit:一款像哆啦A梦般全能的App研发工具
- 1099 PIPI的油田(使用查并集)
- 电商订单仓储ERP管理系统软件源码
- 【大数据技术应用实战】【大数据与人工智能视角下数字孪生和元宇宙】二、新一轮大数据与人工智能变革
- Photoshop学习(十六):使用矢量蒙版
- 基于JAVA三坑购物平台演示录像2020计算机毕业设计源码+数据库+lw文档+系统+部署
- JD-GUI for Mac
- VHDL脉冲激光测距
- 汇编输出出现笑脸梅花等奇怪符号
- a|b 到底是谁整除谁