21 - form表单验证 和 csrf跨站请求伪造

这篇具有很好参考价值的文章主要介绍了21 - form表单验证 和 csrf跨站请求伪造。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. Form 表单验证

        (1). 官网:      

https://wtforms.readthedocs.io/en/2.3.x/

        (2). 安装第三方库

pip install Flask-WTF

         (3). form类型和校验 

# Field类型:
    StringField  # 字符串
    PasswordField # 密码
    IntegerField # 整形
    DecimalField # 浮点,可以指定小数点位数
    FloatField # 浮点
    BooleanField # 布尔
    RadioField # 单选
    SelectField # 下拉列表
    DatetimeField # 日期
    ....
 
# 验证:
    DataRequired # 必填
    EqualTo  # 和谁保持一致
    IPAddress # 验证ip地址
    Length # 长度
    NumberRange # 数字范围
    URL # 必须符合路径格式
    Email # 邮箱
    Regexp # 正则

 文章来源地址https://www.toymoban.com/news/detail-682629.html

二. csrf跨站请求伪造

        (1). settings.py 设置随机字符串

SECRET_KEY = "HAJSDLASDNADALK" # 随机字符串

        (2). app.py 全局使用csrf保护

csrf = CSRFProtect(app=app)

三. 代码示例

        (1). 新建form.py 文件,定义 form 表单数据
import re

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, Length, ValidationError, EqualTo, Regexp


class UserForm(FlaskForm):
    # StringField:text文本框  ;DataRequired():必填 ;Length():长度; EqualTo():和谁保持一致
    name = StringField(label='用户名', validators=[DataRequired(), Length(min=6, max=12, message="用户名长度必须在6~12位之间")])
    password = PasswordField(label="密码", validators=[DataRequired(), Length(min=6, max=12, message="密码长度必须在6~12位之间")])
    confirm_pwd = PasswordField(label="确认密码",
                                validators=[DataRequired(), Length(min=6, max=12, message="密码长度必须在6~12位之间"),
                                            EqualTo('password', "两次密码不一致")])

    phone = StringField(label="手机号码", validators=[DataRequired(), Length(min=11, max=11, message="手机号码必须11位长度")])

    # 定义钩子方法,对用户名增加校验:validate_字段名
    def validate_name(self, data):
        if self.name.data[0].isdigit():
            raise ValidationError("用户名不能以数字开头")

    def validate_phone(self, data):
        phone = data.data
        if not re.search(r'^1[35678]\d{9}$', phone):
            raise ValidationError("手机号码格式错误")
        (2). view.py 调用表单对象,返回给前端
from flask import Blueprint, render_template
from util.form import UserForm

user_bp = Blueprint('user', __name__)


@user_bp.route('/',methods=["GET","POST"])
def hello_world():
    uform = UserForm()  # 表单类对象
    if uform.validate_on_submit():  # 主要通过validate_on_submit 进行校验
        print(uform.name)
        print(uform.password)
        return "提交成功"
    return render_template("user/index.html", uform=uform)
        (3). 前端使用表单对象定义form表单, post请求必须定义csrf_token
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户页面</title>
    <style>
        p span {
            font-size: 14px;
            color: red;
        }
    </style>
</head>
<body>
<form action="{{ url_for('user.hello_world') }}" method="post" novalidate>
    {#  post提交.必须定义 csrf_token 这句代码  #}
    {{ uform.csrf_token }}
    <p>
        {# form中定义的 label : 输入框 #}
        {{ uform.name.label }}:{{ uform.name }}
        <span>{% if uform.name.errors %}{{ uform.name.errors.0 }}{% endif %}</span>
    </p>
    <p>
        {{ uform.password.label }}:{{ uform.password }}
        <span>{% if uform.password.errors %}{{ uform.password.errors.0 }}{% endif %}</span>
    </p>

    <p>
        {{ uform.confirm_pwd.label }}:{{ uform.confirm_pwd }}
        <span>{% if uform.confirm_pwd.errors %}{{ uform.confirm_pwd.errors.0 }}{% endif %}</span>
    </p>

    <p>
        {{ uform.phone.label }}:{{ uform.phone }}
        <span>{% if uform.phone.errors %}{{ uform.phone.errors.0 }}{% endif %}</span>
    </p>
    <p><input type="submit" value="提交"></p>
</form>
</body>
</html>

到了这里,关于21 - form表单验证 和 csrf跨站请求伪造的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSRF(跨站请求伪造)原理

    (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式

    2023年04月08日
    浏览(36)
  • 漏洞篇(CSRF跨站请求伪造)

    目录 一、CSRF 原理 1、CSRF 漏洞的定义 2、XSS 与 CSRF 的区别 3、CSRF 的简单理解 二、基于 DVWA 的 low 级别演示 CSRF 攻击  1、查看源代码 2、构造 URL 链接 3、验证 CSRF 攻击  4、构造恶意链接 5、短连接介绍 三、基于 DVWA 的 Medium 级别演示 CSRF 攻击 1、查看源代码 2、直接修改密码和

    2024年02月01日
    浏览(33)
  • 浏览器安全之CSRF跨站请求伪造

    跨站请求伪造(Cross-site request forgery) 简称 CSRF ,尽管与跨站脚本漏洞名称相近,但它与跨站脚本漏洞不同。 XSS 利用站点内的信任用户,而 CSRF 则通过伪装来自受信任用户的请求来利用受信任的网站。 CSRF和反射型XSS的主要区别是: 反射型XSS 的目的是在客户端执行脚本,

    2024年02月02日
    浏览(28)
  • 渗透测试漏洞原理之---【CSRF跨站请求伪造】

    1、CSRF概述 1.1、基本原理 1.1.1、基本概念 跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击,攻击的重点在于更改状态的请求,而不是盗取数据,因为攻击者无法查看伪造请求

    2024年02月10日
    浏览(30)
  • 跨站请求伪造 CSRF 漏洞原理以及修复方法

    漏洞名称 :跨站请求伪造(CSRF) 漏洞描述 : 跨站请求伪造攻击,Cross-Site Request Forgery(CSRF),攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用服务器发送一个改变用户信息的HTTP请求。CSRF攻击可以从站外和站内发起。从站内发起CS

    2024年02月20日
    浏览(30)
  • CSRF(跨站请求伪造)和SSRF(服务端请求伪造)漏洞复现:风险与防护方法

    这篇文章旨在用于网络安全学习,请勿进行任何非法行为,否则后果自负。  环境准备 示例: 假设用户在银行网站A上登录并保持会话活动,同时他也在浏览其他网站。攻击者在一个不可信任的网站B上创建了一个恶意链接,当用户点击该链接时,会自动向银行网站A发送一个

    2024年02月10日
    浏览(34)
  • Web漏洞之CSRF(跨站请求伪造漏洞)详解

    我们知道了同源策略可以隔离各个站点之间的 DOM 交互、页面数据和网络通信,虽然严格的同源策略会带来更多的安全,但是也束缚了 Web。 这就需要在安全和自由之间找到一个平衡点,所以我们默认页面中可以引用任意第三方资源 ,然后又引入 CSP 策略来加以限制;默认 X

    2024年02月03日
    浏览(35)
  • jenkins 关闭关闭CSRF Protection(跨站请求伪造保护)

    我的jenkins版本是:2.332.4 Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。 从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁用。 老版本Jenkins的CSRF保护功能只需要在 系统管理 全局安全配置 中便可进行打开或者关闭。让人头

    2024年02月15日
    浏览(37)
  • 网络安全进阶学习第三课——CSRF跨站请求伪造

    会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie是一个保存在客户机中的简单的文本文件,当我们使用自己的电脑,通过浏览器进行访问网页的时候,服务器就会生成一个证书然后返回给浏览器并写入我们的本地电脑,这

    2024年02月12日
    浏览(33)
  • 彻底理解前端安全面试题(2)—— CSRF 攻击,跨站请求伪造攻击详解,建议收藏(含源码)

    前端关于网络安全看似高深莫测,其实来来回回就那么点东西,我总结一下就是 3 + 1  = 4,3个用字母描述的【分别是 XSS、CSRF、CORS】 + 一个中间人攻击。当然 CORS 同源策略是为了防止攻击的安全策略,其他的都是网络攻击。除了这 4 个前端相关的面试题,其他的都是一些不常

    2024年02月03日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包