到底是前端验证还是后端验证

news2025/2/4 23:54:59

背景

      软件应用研发中, 前端验证还是后端验证这是意识与认知问题。鉴于某些入门同学还不清楚,我们再来看下:

一.  从软件行业来自国外

Q: 前端验证和后端验证都是对同一个数据的验证,有什么区别?

A: 二者的目的不同:

  • 前端验证是为了提供更好的用户体验;
  • 后端验证是为了保证数据满足业务条件(business invariants);

有了不同的目的,我们在设计前端验证的时候,其出发点是更好的用户体验,即更好地引导客户舒适地完成表单的正确填写。比如针对密码设置,使用提示信息分行列出密码的规则,当密码输入完毕之后,实时检验验证规则是否满足,对于满足的规则,展示为绿色,并在规则前打勾,不满足的规则展示为灰色,并在规则前打叉。
K: 前端体验,后端保证

Q: 为什么一般都是前端验证和后端验证同时存在?

A: 综合上述两个问题的答案:

  • 后端验证必须存在
  • 前端是为了更好的用户体验

所以,追求用户体验的情况下,二者都是需要的

参考资料:
[1] https://stackoverflow.com/questions/17039934/is-it-practical-to-have-back-end-database-side-validation-for-everything
[2] https://stackoverflow.com/questions/162159/javascript-client-side-vs-server-side-validation
[3] https://www.quora.com/Should-I-do-input-validation-on-the-front-end-or-back-end

二.  国内社区

      后端才是最终的保障。总之,一切用户的输入都是不可信的

      业务复杂、后期维护多、安全可用性要求高,如:电商项目的维护,这种方式要同时使用前后端校验,前端校验的目的是为了把更多的错误请求都在浏览器层面就已经拦截处理,不会消耗服务端的内存和线程数,可以提供性能;对于还要进行后端校验是为了提高系统的稳定性,不要动不动就500,还能防止一些人恶意攻击网站等等。

       后端验证是防止接口被私自调用导致破坏数据库结构,如果后端不验证,相当于数据库就裸奔了。

       B/S 系统中对http 请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的,实际上,几乎所有的系统,凡是涉及到数据校验,都需要在服务端进行二次校验。为什么要在服务端进行二次校验呢?这需要理解客户端校验和服务端校验各自的目的。

  1. 客户端校验,我们主要是为了提高用户体验,例如用户输入一个邮箱地址,要校验这个邮箱地址是否合法,没有必要发送到服务端进行校验,直接在前端用 js 进行校验即可。但是大家需要明白的是,前端校验无法代替后端校验,前端校验可以有效的提高用户体验,但是无法确保数据完整性,因为在 B/S 架构中,用户可以方便的拿到请求地址,然后直接发送请求,传递非法参数。
  2. 服务端校验,虽然用户体验不好,但是可以有效的保证数据安全与完整性。
  3. 综上,实际项目中,两个一起用。

      应用程序的输入数据首先应该被检验是否有效。输入的数据能被用户或其他应用程序提交。在Web应用中,通常进行2次数据有效性检验:包括客户端检验和服务端检验。客户端的检验主要是使用户有一个好的用户体验。 首先最好是在客户端检验其表单输入的有效性并且展示给客户端的那些字段输入是无效的。但是,服务器端的校验是更关键和不可缺失的(不要只做客户端检验而不做服务器端检验)。服务器端的检验通常是被应用服务(层)执行,应用服务(层)中的方法首先检验数据的有效性,然后才使用这些通过验证的数据。

refs:

https://www.cnblogs.com/jpfss/p/10937031.html
https://www.cnblogs.com/qiuwenli/p/13423995.html
前端的表单验证还有必要吗? - 知乎
https://www.cnblogs.com/Leo_wl/p/4700748.html?utm_medium=referral&utm_source=itdadao
规范-前、后台请求参数校验-CSDN博客

三.阿里JAVA开发手册-有效性验证

Catch(10-30-09-33-23)

【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略。

refs: 前端验证还是后端验证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1337208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mongodb基础介绍与应用场景

NoSql 解决方案第二种 Mongodb MongoDB 是一款开源 高性能 无模式的文档型数据库 当然 它是NoSql数据库中的一种 是最像关系型数据库的 非关系型数据库 首先 最需要注意的是 无模式的文档型数据库 这个需要后面我们看到它的数据才能明白 其次是 最像关系型数据库的非关系型数据…

(企业 / 公司项目)微服务OpenFeign怎么实现服务间调用?(含面试题)

Feign: 远程调用组件使用步骤,理解上面的图  后台系统中, 微服务和微服务之间的调用可以通过Feign组件来完成.  Feign组件集成了Ribbon负载均衡策略(默认开启的, 使用轮询机制),Hystrix熔断器 (默认关闭的, 需要通过配置文件进行设置开启)  被调用的微服务…

Seem环境安装

创建虚拟环境 conda create -n seem python3.8 conda activate seem 安装相关依赖:(不按照的话会报错) sudo apt-get install openmpi-bin libopenmpi-devconda install gcc_linux-64pip install mpi4py 导入环境 export PYTHONPATH$(pwd…

为工业机器人设计提供解决方案——Samtec砷泰连接器

【摘要/前言】 机器人已经与人类社会相处了数十年,这里指的机器人Robots并不是那些登上头条或在技术大会上引起轰动的可爱或未来主义的设计。它们是在幕后工作的机器,负责制造我们日常生活中使用的许多产品。 【机器人设计遇到的难题】 按照今天的标准…

图片批量处理:图片批量缩放,高效调整尺寸的技巧

在数字媒体时代,图片处理已是日常生活和工作中不可或缺的一部分。有时候要批量处理图片,如缩放图片尺寸,以满足不同的应用需求。现在一起来看看办公提效式具如何高效的将图片批量处理方法,快速、准确地批量调整图片尺寸操作。 下…

饥荒Mod 开发(二四):制作一把万能工具

饥荒Mod 开发(二三):显示物品栏详细信息 源码 饥荒中的每种工具都有独特的功能,比如 斧头用来砍树, 铲子用来 挖东西,鹤嘴锄用来挖矿, 锤子可以敲碎东西,所以我们随身备着4种工具,不仅需要多占用…

浅谈智能型电动机保护器在也门化工行业的应用

1.背景信息Background 现代化工工业中,电动机作为一种拖动机械,成为所有动力机械基础,科学技术不断进步和工艺控制不断完善,尤其是自动化生产要求,迫切需要开发和完善电动机控制和保护设备,实现对生产过程…

论文降重隐藏字符怎么识别 papergpt

大家好,今天来聊聊论文降重隐藏字符怎么识别,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 论文降重隐藏字符的识别方法 一、引言 在论文降重过程中&#xff…

Linux 学习

复制/etc 文件夹到/mnt 目录 cp -r(-a) /etc /mnt回到上一次文件夹 cd -切换到当前用户的家目录_cd ~________________________如何查找ls 命令的位置_______which ls_________________________________请写出ll 命令中查看到的7大文件类型缩写 - s l p c b …

PostgreSQL | FunctionProcedure | 函数与存储过程的区别

文章目录 PostgreSQL | Function&Procedure | 函数与存储过程的区别1. 简述书面说法大白话讲 2. 函数(Function)2.1 定义2.2 用途2.3 执行2.4 事务处理2.5 说点例子1. 当参数都是IN类时2. 参数中出现OUT、INOUT参数时 3. 存储过程(Proced…

路由器介绍和命令操作

先来回顾一下上次的内容: ip地址就是由32位二进制数组 二进位数就是只有数字0和1组成 网络位:类似于区号,表示区域作用 主机位:类似于号码,表示区域中编号 网络名称:网络位不变,主机位全为0 …

C++-类和对象(1)

1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完 成。…

数据结构思维导图

数据结构思维导图,目前先写这些,后续有更新会继续。 1 数据结构思维导图

git中的smart checkout和force checkout

切换分支时出现了这个问题: 这是因为shiyan01分支修改了代码,但是没有commit, 所以在切换到test分支的时候弹出这个窗口 一、smart checkout(智能签出) 会把shiyan01分支的改动内容带到test分支。合并处理后的内容就变成了test分支的内容,而shiyan01分支的改动会被…

面试题之二HTTP和RPC的区别?

面试题之二 HTTP和RPC的区别? Ask范围:分布式和微服务 难度指数:4星 考察频率:70-80% 开发年限:3年左右 从三个方面来回答该问题: 一.功能特性 1)HTTP是属于应用层的协议:超文本传输协议…

认识K8S的基本概念和原理

K8S:Kubernetes8个字母省略就是k8s 自动部署,自动扩展和容器化部署的应用程序的一个开源系统 k8s是负责自动化运维管理多个容器化程序的集群。是一个功能强大的容器编排工具。分布式和集群化的方式进行容器管理。 k8s的版本:1.15或1.18。使…

YOLOv8涨点技巧:一种新颖的多尺度滑窗注意力,助力小目标和遥感影像场景

💡💡💡本文全网独家改进:提出了一种新颖的多尺度滑窗注意力机制,有效的应用在遥感影像和小目标场景,实现涨点。 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创)…

【通讯录案例-搭建登录界面 Objective-C语言】

一、来看我们这个通讯录案例 1.接下来啊,我们来做这个通讯录案例, 然后呢,做这么一个应用程序啊, 我们第一步呢,先把界面儿搭了, 然后呢,搭之前,简单的来分析一下, 首先呢,这是,中间儿的这一块儿, 1)有个“账户”、“密码”,这一块儿, 这是一个什么控制器,…

Unity 贝塞尔曲线工具获取运动轨迹

Unity 贝塞尔曲线工具获取运动轨迹 一、介绍贝塞尔曲线二、Unity中贝塞尔曲线工具介绍1.创建一个空物体挂在上BezierSpline.cs脚本组件2.由上图可知刚创建出来的有两个点和两个手柄组成3.我们可修改其坐标看下效果4.这样我们就可以获得这两个点之间的指定数量的点来作为某个物体…

Spring Boot简单多线程定时任务实现 | @Async | @Scheduled

Spring Boot简单多线程定时任务实现 实现步骤 1 创建一个Spring Boot项目 2 定义定时任务: package com.jmd.timertasktest.task;import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Async; impor…