数据校验

form校验组件

一个人想着一个人 提交于 2019-12-03 02:36:36
form校验组件 后端 from django import forms class myForms(forms.Form): username = forms.CharField( min_length=6, # 最少6个字符 max_length=20, # 最多20个字符 label="用户名:", # label标签名 error_messages={ # 定义错误提示信息(默认英文) "min_length": '用户名不能小于6位', "max_length": '用户名不能超过20位', "required": '用户名不能为空', }, required: False, # 用户名可以为空 initial="请输入用户名", # 设置初始值 widget=forms.widgets.TextInput( # 设置标签类型 attrs={ # 设置标签属性 "class": "form-control" # 设置class属性 } ) ) password = forms.CharField( min_length=6, # 最少6个字符 max_length=20, # 最多20个字符 label="密码:", # label标签名 error_messages={ # 定义错误提示信息(默认英文) "min_length": '密码不能小于6位', "max

Django-forms校验

匿名 (未验证) 提交于 2019-12-03 00:39:02
首先我们定义一个校验类 class UserForm(forms.Form): name =forms.CharField(min_length=4) # 最小长度为4 email=forms.EmailField() # 邮箱格式 def reg(request): # 调用验证,因为在类中我们没有写tel字段的规则,所以Django会无视这个字段. form=UserForm({ ‘ name ‘ : ‘ til ‘ , ‘ email ‘ : ‘ 123@qq.com ‘ , ‘ tel ‘ : ‘ 123456 ‘ }) # 返回布尔类型,如果验证通过为True,否则为False.比如在验证类中我们写了name,email两个字段的规则,如果我们在传数据的时候,没有传name字段,只穿了email返回的也会时False,但如果我们多了一个tel字段,django会无视这个字段,只要name,email两个字段通过,就返回True print (form.is_valid()): if form.is_valid(): print (form.cleaned_data) # 正确的字段,字典格式 else : print (form.cleaned_data) print (form.errors) # 错误字段{‘name‘:[‘错误的原因‘]} # 注意:在返回的数据中

杂记---Mongo的Invalid BSON field name $gte

匿名 (未验证) 提交于 2019-12-03 00:38:01
1.前言   这几天使用mongo的时候遇到了一个异常:Invalid BSON field name $gte,该问题可能会有很多小伙伴会遇到,因此记录一下解决过程。起因是用JAVA翻译一个其他语言写的程序,需要在mongo中保存某次的查询条件,以便下次使用。但是保存的时候抛出了这个异常,原程序却没有问题,这个肯定和JAVA的实现有关,与mongo服务本身关系不大了。下面是一个简略的排查过程,纯文字,尽量会写的简洁些。 2.排查过程   1.定位异常抛出的位置:     该异常由AbstractBsonWriter的writeName方法抛出,其由FieldNameValidator进行校验,校验不通过就会抛出该异常。     分析:这个过程十有八九就是用于校验mongo的键名称了,作用应该和防止SQL注入一样,用于防止命令注入的。这个时候就要明确,这个不是mongo本身限制的,而是Java的mongo driver限制的,不然没道理其他语言能够插入。   2.确定FieldNameValidator的规则:     该接口有四个实现类:       CollectibleDocumentFieldNameValidator:为空,包含.,以$开头非$db,$ref,$id校验失败       MappedFieldNameValidator

跨站请求伪造(scrf)、设置scrf值、CBV加装饰器

ⅰ亾dé卋堺 提交于 2019-12-03 00:16:46
跨站请求伪造(scrf) 听说过钓鱼网站吗? 就类似于你搭建了一个跟银行一模一样的web页面 用户在你的网站转账的时候输入用户名 密码 对方账户 银行里面的钱确实少了 但是发现收款人变了 原理: 你写的form表单中 用户的用户名 密码都会真实的提交给银行后台 但是收款人的账户却不是用户填的 你暴露给用户的是一个没有name属性的input框 你自己提前写好了一个隐藏的带有name和value的input框 解决钓鱼网站的策略: 只要是用户想要提交post请求的页面 我在返回给用户的时候就提前设置好一个随机字符串 当用户提交post请求的时候 我会自动先取查找是否有该随机字符串 如果有 正常提交 如果没有 直接报403 所以!! 那个被我们注释掉的中间件,就是用来校验你有没有这个随机字符串的。 这就是django自带的东西,你可以理解为,这个中间件不允许的前端post请求,都不能通过这一层校验,要怎样让post请求成功呢,就要让他通过校验。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href=

第七章、中间件续写

橙三吉。 提交于 2019-12-03 00:16:38
目录 第七章、中间件续写 一、中间件的执行顺序 测试思路: 自定义中间件 代码 二、跨站请求伪造 三、csrf装饰器 四、post请求提交数据通过 csrf 校验 五、自我拷问 分FBV和CBV 未注释掉 csrf 中间件时 单功能取消 csrf 校验:csrf_exempt 注释掉 csrf 中间件时 单功能开启 csrf 校验:csrf_protect 第七章、中间件续写 一、中间件的执行顺序 测试思路: 在 settings.py 里注册不同中间件,探究默认的执行顺序 在不同中间件的 process_request 和 process_response 等方法中 return HttpResponse 对象会对执行顺序造成什么影响 了解五种方法的触发时机 自定义中间件 新建一个文件夹(放在全局或 app 内) 写一个类继承 MiddlewareMiXin 类 里面书写需要的(五个方法中的某些)方法 一定要在 settings.py 里配置中间件注册 代码 mymiddleware/mdd.py 自定义中间件 from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse class MyMdd(MiddlewareMixin): def process

使用jsr303实现数据校验

匿名 (未验证) 提交于 2019-12-03 00:14:01
除了前端的js验证,服务端也可加入数据验证,springmvc中有两种方式可以验证输入 利用spring自带的验证框架 利用jsr303实现 jsr303实现数据校验 jsr303是java为bean数据合法性校验所提供的标准框架。jsr303不需要编写验证器,它定义了一套可标注在成员变量、属性方法上的校验注解。 springmvc支持jsr303标准的校验框架,spring的DataBinder在进行数据绑定时,可同时调用校验框架来完成数据校验工作,非常方便。 spring本身没有提供jsr303的实现,hibernate validator实现了jsr303,所以必须在项目中加入来自hibernate validator库的jar文件 ,复制hibernate-validator-4.3.2.Final-dist.zip中的三个jar文件即可,spring将会自动加载并装配 hibernate-validator-4.3.2.Final.jar jboss-logging-3.1.0.CR2.jar validator-api-1.0.0.GA.jar package edu.cn.pojo; import org.hibernate.validator.constraints.Length; import org.springframework.format

CRC32校验算法-C实现

匿名 (未验证) 提交于 2019-12-03 00:05:01
CRC即循环冗余校验码 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 CRC校验实用程序库在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段。 以下是CRC32的C语言实现,经过测试,能够正确运行: https://blog.csdn.net/weed_hz/article/details/25132343 来源:51CTO 作者: 仅仅是一只码农 链接:https://blog.csdn.net/qq_23940143/article/details/100850069

spring 使用@Valid校验数据出错DEBUG org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod - Failed to resolve argument 0 of type

匿名 (未验证) 提交于 2019-12-03 00:02:01
@Valid BindingResult 参考来源: https://segmentfault.com/q/1010000008384686 正确的参数签名 @PostMapping("publishPost.do") public String publishPost(@Valid @ModelAttribute Post post, BindingResult bindingResult, Errors errors, Model model, Integer tid,String action, RedirectAttributes attributes) { 错误的签名 //发帖 @PostMapping("publishPost.do") public String publishPost(@Valid @ModelAttribute Post post,Integer tid, BindingResult bindingResult, Errors errors, Model model, String action, RedirectAttributes attributes) { 来源:博客园 作者: 你不知道的浪漫 链接:https://www.cnblogs.com/passedbylove/p/11504697.html

挖洞技巧:任意账号密码重置

匿名 (未验证) 提交于 2019-12-02 23:57:01
1、通过忘记密码的方式,拦截数据包,修改接受验证码的手机号或者邮箱帐号。   这里需要的注意的是看系统是否做校验数据,有的只校验了用户信息但是没有校验手机号码,就算收到验证码也是没有不能够正常重置该用户名的。 2、跳过验证   有不少网站的重置密码方式像下面这种:      www . test . com / resetpassword . php ? action = step1   像这种尝试去绕过,修改step1。 3、验证码多次有效的   登录的时候验证码不主动刷新多次登录有效的,可以直接尝试爆破。 4、替换cookie   用户重置的时候将请求包中的cookie换成用户B的。 5、修改ID   按照重置正常步骤走,但是要将ID改成别人的,这里主要是因为没有进行身份校验。当然也可以遍历所有id将密码所有人的密码改成一个。 6、验证码没有绑定用户   首先重置自己的密码,自己的手机会收到验证码,修改密码的时候将账号换成B用户的。 7、没有对用户进行校验   其实跟第6点很相似,这里只是最后一步修改密码的时候改为其他用户。 来源:博客园 作者: Ritte 链接:https://www.cnblogs.com/ritte/p/11457250.html

Django - 自定义Form校验规则

匿名 (未验证) 提交于 2019-12-02 23:57:01
class MyForm(forms.Form): # form可以校验的规则 username = fields.CharField(max_length=32,min_length=3) password = fields.CharField(max_length=32,min_length=3) re_password = fields.CharField(max_length=32,min_length=3) def clean_username(self): # 获取username username = self.cleaned_data['username'] # 判断用户名是否存在 if models.User.objects.filter(username=username).count(): # 存在即不符合规则,必须抛出ValidationError异常 raise ValidationError('该用户名已存在') # 校验通过,则返回清洗后的数据 return self.cleaned_data['username'] def clean(self): # 获取两次输入的密码 password = self.cleaned_data['password'] re_password = self.cleaned_data['re_password'] #