到底是前端验证还是后端验证
背景
软件应用研发中, 前端验证还是后端验证这是意识与认知问题。鉴于某些入门同学还不清楚,我们再来看下:
一. 从软件行业来自国外
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 请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的,实际上,几乎所有的系统,凡是涉及到数据校验,都需要在服务端进行二次校验。为什么要在服务端进行二次校验呢?这需要理解客户端校验和服务端校验各自的目的。
- 客户端校验,我们主要是为了提高用户体验,例如用户输入一个邮箱地址,要校验这个邮箱地址是否合法,没有必要发送到服务端进行校验,直接在前端用 js 进行校验即可。但是大家需要明白的是,前端校验无法代替后端校验,前端校验可以有效的提高用户体验,但是无法确保数据完整性,因为在 B/S 架构中,用户可以方便的拿到请求地址,然后直接发送请求,传递非法参数。
- 服务端校验,虽然用户体验不好,但是可以有效的保证数据安全与完整性。
- 综上,实际项目中,两个一起用。
应用程序的输入数据首先应该被检验是否有效。输入的数据能被用户或其他应用程序提交。在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开发手册-有效性验证

【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略。
相关文章:
到底是前端验证还是后端验证
背景 软件应用研发中, 前端验证还是后端验证这是意识与认知问题。鉴于某些入门同学还不清楚,我们再来看下: 一. 从软件行业来自国外 Q: 前端验证和后端验证都是对同一个数据的验证,有什么区别? A: 二者的目的不同&…...
AlignBench:量身打造的中文大语言模型对齐评测
对齐(Alignment),是指大语言模型(LLM)与人类意图的一致性。换言之,就是让LLM生成的结果更加符合人类的预期,包括遵循人类的指令,理解人类的意图,进而能产生有帮助的回答等…...
asp.net core 教程
asp.net core 教程 写在前面新建项目Get和PostGETPOST MVC-模型控制视图如何通俗理解MVCMVC架构---文件夹详解Connected ServicesPropertieswwwroot依赖项ControllersModelsViews 代码实例 API模型(前后端分离)前端代码后端代码 文件配置优先级优先级顺序…...
概率论1:下象棋问题(3.5)
每日小语 时刻望着他人的眼色行事,是腾飞不了的。自己怎么想就积极地去做,这是需要胆量的。——广中平佑 题目 甲、乙二人下象棋, 每局甲胜的概率为a,乙胜的概率为b. 为简化问题,设没有和局的情况,这意味着a b1. 设想…...
LLM调研笔记
这里写目录标题 LLM调研1. 外挂知识库2. 微调数据prompting和fine-tuning的对比 3. NLP的发展4. 大语言模型的涌现能力5. 大模型的几个关键技术6. 数据预处理7. 主流架构8. 模型训练9. 大模型的微调10. 大模型的使用11. 大模型的评估 LLM调研 大模型的不足:在特定的…...
K8S----RBAC
一、角色、绑定、用户 1、 Role 与ClusterRole 1、Role 总是要在一个命名空间中设置权限,当需要创建一个Role的时候必须指定命名空间; 2、ClusterRole 是非命名空间范围的,不受命名空间局限 2 、RoleBinding 与ClusterRoleBinding 1、RoleBinding 是受命名空间限制的 2、…...
HBase 超大表迁移、备份、还原、同步演练手册:全量快照 + 实时同步(Snapshot + Replication)不停机迁移方案
博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…...
统计直线上2个点的分布占比
直线上有6个格子,向格子里扔2个石子,共有5种可能。 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 第1种两个石子是连着的,共有5个 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 …...
uniapp创建/运行/发布项目
1、产生背景----跨平台应用框架 在移动端各大App盛行的时代,App之间的竞争也更加激烈,他们执着于让一个应用可以做多个事情 所以就应运而生了小程序,微信小程序、支付宝小程序、抖音小程序等等基于App本身的内嵌类程序。 但是各大App他不可…...
洛谷 P2367 语文成绩 刷题笔记
P2367 语文成绩 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 差分 令a[i]为b[i]数组的前缀和 a[n]b[1]b[2]b[3].....b[n]; a[n-1]b[1]b[2]b[3].....b[n-1]; 构造差分数组 b[i]a[i]-a[i-1]; 有什么好处 当我们想对a[l]--a[r]范围内所有数据加上一个数x 不必循环 for(i…...
Opencv_CUDA实现推理图像前处理与后处理
Opencv_CUDA实现推理图像前处理与后处理 通过trt 或者 openvino部署深度学习算法时,往往会通过opencv的Mat及算法将图像转换为固定的格式作为输入openvino图像的前后处理后边将在单独的文章中写出今晚空闲搜了一些opencv_cuda的使用方法,在此总结一下前…...
Android.bp 和 Android.mk 的对应关系
参考 Soong 构建系统 Android.mk 转为 Android.bp 没有分支、循环等流程控制的简单的 Android.mk ,可以通过 androidmk 命令转化为 Android.bp source 、lunch 之后执行即可。 androidmk Android.mk > Android.bp对应关系 Android 13 ,build/soon…...
力扣-收集足够苹果的最小花园周长[思维+组合数]
题目链接 题意: 给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 ,且每条边都与两条坐标轴之一平行。 给你一个整…...
【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇
文章目录 📝前言🌠什么是位段?🌉 位段的内存分配🌉VS怎么开辟位段空间呢?🌉位段的跨平台问题🌠 位段的应⽤🌠位段使⽤的注意事项🚩总结 📝前言 本…...
基于Hexo+GitHub Pages 的个人博客搭建
基于HexoGitHub Pages 的个人博客搭建 步骤一:安装 Node.js 和 Git步骤二:创建Github Pages 仓库步骤二:安装 Hexo步骤三:创建 Hexo 项目步骤四:配置 Hexo步骤五:创建新文章步骤六:生成静态文件…...
7. 结构型模式 - 代理模式
亦称: Proxy 意图 代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢? 举个例子ÿ…...
挑战Python100题(6)
100+ Python challenging programming exercises 6 Question 51 Define a class named American and its subclass NewYorker. Hints: Use class Subclass(ParentClass) to define a subclass. 定义一个名为American的类及其子类NewYorker。 提示:使用class Subclass(Paren…...
gin实现登录逻辑,包含cookie,session
users/login.html {{define "users/login.html"}} <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录页面</title> </head> <body><form method"post" a…...
云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)
目录 一、理论 1.K8S集群升级 2.环境 3.升级集群(v1.23.14) 4.验证集群(v1.23.14) 二、实验 1. 环境 2.升级集群(v1.23.14) 2.验证集群(v1.23.14) 一、理论 1.K8S集群升级 …...
C++面向对象(OOP)编程-位运算详解
本文主要介绍原码、位运算的种类,以及常用的位运算的使用场景。 目录 1 原码、反码、补码 2 有符号和无符号数 3 位运算 4 位运算符使用规则 4.1 逻辑移位和算术移位 4.1.1 逻辑左移和算法左移 4.1.2 逻辑右移和算术右移 4.1.3 总结 4.2 位运算的应用场景 …...
WarcraftHelper技术适配方案:让经典RTS游戏重获现代硬件支持
WarcraftHelper技术适配方案:让经典RTS游戏重获现代硬件支持 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 痛点解析:魔兽争霸…...
普通程序员有必要深入学习JVM底层原理吗?
对于JVM,我想大部分小伙伴都是要面试了才会去学,其余时间基本不会去看。但值得一说的是,当你工作多年之后,你遇到的项目会越来越复杂,遇到的问题也会越来越复杂:各种古怪的内存溢出,死锁&#x…...
别再只用BCE了!用PyTorch实现ASL损失函数,搞定多标签分类中的样本不均衡
多标签分类新范式:PyTorch实战ASL损失函数解决样本不均衡难题 在图像标注、医学诊断或文本情感分析等多标签分类任务中,我们常常遇到一个棘手问题——某些标签的出现频率可能比其他标签高出几个数量级。想象一下,当你构建一个商品标签系统时&…...
MouseClick:让重复点击成为过去的智能鼠标自动化工具
MouseClick:让重复点击成为过去的智能鼠标自动化工具 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,操…...
11,2kw双向储能变换器:基于PFCLLC结构的工业应用仿真研究
11,2kw双向储能变换器仿真,已工业应用。 pfcllc结构,可整流,可逆变。 整流模式下,pfc为单相pwm整流器,输入电压220V,50Hz,llc输出电压55V。 逆变模式下,llc输入电压55V&a…...
Claude Code教程(四)| Codex 配置(插件安装)
Claude Code教程(四)| Codex 配置(插件安装)一、核心定位(一句话看懂)二、前置准备(必做)2.1 核心环境要求(极简)2.2 关键说明(重要)三…...
G-Helper终极指南:如何免费优化华硕笔记本性能,告别Armoury Crate臃肿体验
G-Helper终极指南:如何免费优化华硕笔记本性能,告别Armoury Crate臃肿体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across …...
Winhance-zh_CN:如何免费让你的Windows系统焕然一新
Winhance-zh_CN:如何免费让你的Windows系统焕然一新 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_C…...
牛客网1000 大厂Java 面试题大全(2026 最新版)
很多 Java 工程师的技术不错,但是一面试就头疼,10 次面试 9 次都是被刷,过的那次还是去了家不知名的小公司。 问题就在于:面试有技巧,而你不会把自己的能力表达给面试官。 应届生:你该如何准备简历&#…...
FanControl:Windows系统下深度自定义风扇控制的终极指南
FanControl:Windows系统下深度自定义风扇控制的终极指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/…...
