数据校验

drf框架(三)

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-29 04:36:58
序列化组件 Serializer(偏底层,了解) ModelSerializer(重点) ListModelSerializer(辅助群改) 1.Serializer的运用 序列化器的使用 序列化器的使用分两个阶段:   1.在客户端请求时:使用序列化器可以完成对数据的反序列化(就是前段往后端传递数据,反序列化之后保存数据)   2.在服务器响应时,使用序列化器可以完成对数据的序列化(服务器取出数据,序列化之后往前段发送展示) 序列化使用流程: 基本使用:   1.先查询出一个用户对象 from models import user user = User.object.get(id=2)   2.构造序列化器对象 from user.serializers import UserSerializer user_ser = Userserializer(user) #放入查询出的user对象   3.获取序列化对象 通过data属性可以获取序列化后的数据 上面查出来的user_ser是一个serializer对象,需要取出具体的数据传给前端,所有要用到 user_ser.data取出具体数据   4.如果要被序列化的数据是包含多条数据的(也可以说被[ ]嵌套的,不管是多条还是单条),需要添加many=True参数 user = models.User.objects.all()

文件上传漏洞(File Upload)

北战南征 提交于 2019-11-29 02:19:37
简介 File Upload,即文件上传漏洞,通常是由于对用户上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马,病毒,恶意脚本等获取服务器的webshell权限,并进而攻击控制服务器,因此文件上传漏洞带来的危害常常是毁灭性的。简单点说,就是用户直接或者通过各种绕过方式将webshell上传到服务器中进而执行利用。例如,如果你的服务器为php环境,用户上传了一个php一句话木马,并通过菜刀连接获取webshell,就可能对你的服务器文件进行篡改甚至执行命令。 文件上传校验方法 客户端javascript校验(一般只校验后缀名) 当客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,前端的 js 脚本就对文件的扩展名进行检测来判断是否是可以上传的类型 服务端校验 文件头content-type字段校验 后端通过对上传文件的MIME类型进行黑白名单检测过滤 文件内容头校验 不同的文件都有不同的文件头,文件头就是为了描述一个文件的一些重要的属性,它告诉了打开并处理该文件的程序这些属性。有些上传接口会检测你上传的文件头信息以此来判断是否为正真的文件类型,比如 jpg 格式图片头部是 JFIF ,gif头部是GIF89a,png头部是%PNG。 校验文件大小 一些上传接口通过函数比如 getimagesize()

如何跳过前端JavaScript的验证

风格不统一 提交于 2019-11-29 00:24:02
经常听别人说不要把验证的功能放在前端,因为别人可以通过其他的方法跳过前端的校验,从而达到绕过前端的验证。 那么是如何绕过前端验证的?有很多的方法,我这里说一种方法。 1、就是先把网站下载下来保存到本地。 2、下载完之后改js里面的action地址,一般都是相对地址来的,直接改为网站的绝对地址就好了。 3、改完之后,把一些前端的验证方法删除掉,然后试着提交数据,就可以绕过前端校验了。(不过一般的网站都是后台会有校验的,所以最好就是自己写一个网站试一下。这样就更能看到效果了) 参考:https://zhidao.baidu.com/question/152319982.html 来源: https://www.cnblogs.com/masha2017/p/11435065.html

Ajax校验

谁说胖子不能爱 提交于 2019-11-28 20:40:46
一、Ajax简介 AJAX即(Asynchronous JavaScript and Xml)(异步JavaScript和XML),是指一种创建交互式 网页 应用的网页开发技术。 Ajax的关键元素包括以下内容: ① JavaScript语言:Ajax技术的主要开发语言。 ② XML/JSON/HTML等:用来封装请求或响应的数据格式 ③ DOM(文档对象模型):通过DOM属性或方法修改页面元素,实现页面局部刷新 ④ CSS:改变样式,美化页面效果,提升用户体验度 ⑤ Ajax引擎:即XMLHttpRequest对象,以异步方式在客户端与服务器之间传递数据。 二、Ajax工作流程 三、常用方法: 四、常用属性 五、实现思路:   1、锁定用户名文本框,注册onblur事件   2、创建XMLHttpRequest对象。通过window.XMLHttpRequest的返回值判断创建XMLHttpRequest对象的方式   3、设置回调函数。通过onreadystatechange属性设置回调函数,其中回调函数需要自定义   4、初始化XMLHttpRequest对象。通过open()设置请求的发送方式和路径   5、发送请求 jsp页面: <body> 用户名:<input type="text" name="txtName" id="txtName"/> <span id=

一文读懂比特币交易原理

妖精的绣舞 提交于 2019-11-28 19:40:34
​ 版权声明:可以转载,但请备注原文链接: shuwoom.com/?p=430 关键字:比特币、区块链、交易脚本、智能合约、UTXO账户模型、价值转移 1.比特币的UTXO模型 首先,在讲比特币交易过程之前要说明一个事情。比特币系统是没有余额的概念的,它使用的是UTXO模型(Unspent Transaction Outputs,未使用过的交易输出),我们在交易过程中经常说的钱包余额,实际上是一个钱包地址的UTXO集合。所以,在比特币网络中,存储比特币余额的是交易输出,准确点说就是未使用过的交易输出。 如下图,每一笔交易记录了时间、发送人、接收人和金额。那如果要计算A的余额,那么就要遍历所有跟A有关的交易,减去A发送的每一笔金额,并加上A接收的每一笔金额,可以计算出。 A的余额 = 20-10=10 B的余额 = 20+10+5-5=30 C的余额 = 20-5=15 D的余额 = 20+5=25 比特币系统中计算余额的方法也是类似这样。所以,要计算一个用户的比特币余额,就需要遍历整个交易的历史。而以太坊由于采用了Account模型,也就是采用余额的概念,所以不需要溯源整个交易历史。 图1 账本 2.交易过程 上面,我们介绍了比特币的UTXO模型,解释了比特币“余额”的概念。接下来,我们正式开始讲解比特币的交易过程,并在接下来的分析过程中我们会回答两个很重要的问题: (1

安全开发checklist

馋奶兔 提交于 2019-11-28 19:25:07
美的金融科技安全开发checklist 安全设计与开发checklist 检查类型 检查项(checklist) 输入验证 校验跨信任边界传递的不可信数据(策略检查数据合法性,含白名单机制等) 格式化字符串时,依然要检验用户输入的合法性,避免可造成系统信息泄露或者拒绝服务 禁止向java Runtime.exec()方法传递不可信、未净化的数据(当参数中包含空格,双引号,以-或者/符号开头表示一个参数开关时,可能会导致参数注入漏洞), 建议如果可以禁止JVM执行外部命令,未知漏洞的危害会大大降低,可以大大提高JVM的安全性。 验证路径之前应该先将其标准化为实际路径(特殊的文件名,如“..”,symbolic links 、hard links、shortcuts) 从ZipInputStream提取文件,如果不在程序预期计划的目录之内时,应拒绝将其提取出来,或者将其提取到一个安全的位置 从ZipInputStream提取文件,若解压之后的文件大学超过一定限制时,必须拒绝将将其解压 在处理以前,验证所有来自客户端的数据,包括:所有参数、url、http头信息(比如:cookie名字和数据值),确定包括了来自JavaScript、Flash或者他潜入代码 的postf返回信息 如果任何潜在的危险字符必须作为输入,请确保您执行来了额外的安全控制,比如:输入转义、输出编码

【DRF序列化】

瘦欲@ 提交于 2019-11-28 15:57:37
目录 基本的序列化操作 外键/多对多关系的序列化 反序列化的操作 单条数据查询及更新 数据的校验 单个字段的校验 多个字段的校验 自定义校验器 终极用法 ModelSerializer 原文: http://blog.gqylpy.com/gqy/287 前后端分离后,其交互一般都选择使用JSON数据格式,JSON是一个轻量级的数据交互格式. 因此,后端发送给前端(或前端发送给后端)的数据都要转成JSON格式,这就得需要我们把从数据库内取到的数据进行序列化. 本文将详细讲述Django项目中如何使用第三方库 rest_framework 进行序列化. 在命令行中输入: pip install djangorestframework ,方可下载rest_framework. @ *** 首先,我们准备三张数据表: from django.db import models __all__ = ['Book', 'Publisher', 'Author'] class Book(models.Model): """书籍表""" title = models.CharField(max_length=62) CHOICES = ((1, '前端'), (2, '后端'), (3, '运维')) category = models.IntegerField(choices=CHOICES)

web网页测试用例(非常实用)

假如想象 提交于 2019-11-28 15:02:46
Web测试中,各类web控件测试点总结 一 、界面检查   进入一个页面测试,首先是检查title,页面排版,字段等,而不是马上进入文本框校验   1、页面名称title是否正确   2、当前位置是否可见 您的位置:xxx>xxxx   3、文字格式统一性   4、排版是否整齐   5、列表项显示字段是否齐全,列表项字段名称是否跟表单统一   6、同一页面,是否出现 字段名称相同、值取不同的问题。   7、数据加载情况:除了文本框的值,还要注意:   复选框,是否保存打√,或者保存不打√   下拉框,是否保存选择的值   多文本框,值是否都被保存,空格,换行是否保存 二、单文本框(type=text)   边界:字段长度   判空:是否可以为空   唯一性:是否唯一 (小归结:边界、判空、唯一性、特殊字符、正确性)   考虑语言,操作环境   特殊符号测试输入:   ' or 1<>'1   ' or '1'='1  ' or '1'<>'2  "|?><   where a='xxx'   下划线是否允许  输入全部空格 输入 单引号   ><script>alert(“123”);</script>>   特殊字段输入限定:   框内容是否合法(tel,ip,url,email)序号等,直接限制输入数字,其他过滤掉   输入金额文本框,整数首位为0,过滤掉,小数点后面

web网页测试用例(非常实用)

不羁岁月 提交于 2019-11-28 14:32:22
Web测试中,各类web控件测试点总结 一 、界面检查   进入一个页面测试,首先是检查title,页面排版,字段等,而不是马上进入文本框校验   1、页面名称title是否正确   2、当前位置是否可见 您的位置:xxx>xxxx   3、文字格式统一性   4、排版是否整齐   5、列表项显示字段是否齐全,列表项字段名称是否跟表单统一   6、同一页面,是否出现 字段名称相同、值取不同的问题。   7、数据加载情况:除了文本框的值,还要注意:   复选框,是否保存打√,或者保存不打√   下拉框,是否保存选择的值   多文本框,值是否都被保存,空格,换行是否保存 二、单文本框(type=text)   边界:字段长度   判空:是否可以为空   唯一性:是否唯一 (小归结:边界、判空、唯一性、特殊字符、正确性)   考虑语言,操作环境   特殊符号测试输入:   ' or 1<>'1   ' or '1'='1  ' or '1'<>'2  "|?><   where a='xxx'   下划线是否允许  输入全部空格 输入 单引号   ><script>alert(“123”);</script>>   特殊字段输入限定:   框内容是否合法(tel,ip,url,email)序号等,直接限制输入数字,其他过滤掉   输入金额文本框,整数首位为0,过滤掉,小数点后面

drf三大认证组件

血红的双手。 提交于 2019-11-28 11:41:38
目录 一、认证模块工作原理 二、认证模块使用方法 2.1 自定义认证类的实现方法 2.2 通过序列化模块实现登陆,通过认证模块进行校验 三、权限模块使用方法 3.1 系统的权限类 3.2 自定义权限类的实现方法 四、频率模块使用方法 一、认证模块工作原理 源码分析: 首先:在APIView的dispatch中调用了initial方法进行了三大认证 认证模块: 校验用户是否登陆: 登陆用户、非法用户、游客 权限模块 :校验用户是否拥有权限: 校验对象是 登陆用户和游客 频率模块: 访问接口的次数在设定的时间范围内是否过快: def initial(self, request, *args, **kwargs): # 认证模块:校验用户是否登陆: 登陆用户、非法用户、游客 self.perform_authentication(request) # 权限模块:校验用户是否拥有权限: 校验对象是 登陆用户和游客 self.check_permissions(request) # 频率模块:访问接口的次数在设定的时间范围内是否过快: # 配置访问频率,每次访问都要缓存记次,超次后需要等待的事件 self.check_throttles(request) 进入 self.perform_authentication(request) 会发现其中只有一句话 def perform