服务器验证(Server-side Validation) 的工作是:在服务器端对从客户端(如浏览器、手机APP)发来的请求数据进行审查、核对和确认,以确保其符合预期、安全且合法。

可以把服务器想象成一个严格的“门卫”和“质检员”,它的工作贯穿以下几个核心环节:
这是最基本的工作,确认请求者的身份,常见方式包括:
用户名/密码:检查账号是否存在、密码是否匹配。
令牌/ Session:验证用户登录后获得的“通行证”(如JWT,即JSON Web Token,一种用于身份验证的令牌格式)是否有效、是否过期。
双因素认证:验证除了密码外的第二重凭证(如手机验证码、指纹)。

OAuth/第三方登录:验证第三方平台(如微信、Google)返回的授权码是否真实有效。
目的:防止未授权访问,确保是“你”本人在操作。
客户端发送的数据(如表单、JSON)可能不合法或被篡改,服务器需要严格检查:
格式检查:邮箱格式对不对、手机号是不是11位、数字是否在合理范围内(年龄1-150岁)。
必要性检查:必填字段(如姓名、付款金额)是否为空。

类型检查:要求传数字的地方,传了字符串或数组,服务器会拒绝。
长度限制:密码是否过短?评论字数是否过长?
业务逻辑验证:购买数量”不能大于“库存”;“开始日期”不能晚于“结束日期”。
目的:保护数据完整性,防止程序因错误数据而崩溃或产生逻辑漏洞。
即使身份正确,也不代表可以做所有事,服务器会检查:
角色验证:普通用户、管理员、VIP用户的权限不同,普通用户不能访问后台管理页面。
资源归属验证:用户A只能编辑自己发的帖子,不能编辑用户B的帖子。
操作权限:用户A能否删除这个文件?能否取消别人的订单?
目的:实施访问控制,防止越权操作(这是最常见的Web攻击之一)。
这是服务器最重要的防攻击工作之一:
防SQL注入:检查输入中是否包含恶意SQL代码(如' OR 1=1)。
防XSS(跨站脚本攻击):转义或过滤输入中的HTML/JavaScript代码,防止恶意脚本存入数据库并在其他用户浏览器上执行。
防CSRF(跨站请求伪造):验证请求是否携带了原站点的特定令牌,确保不是被第三方网站诱导发起的。
防暴力破解:限制登录尝试频率、使用验证码。
上传文件验证:检查文件类型(靠内容而非后缀名)、文件大小、并扫描病毒。
目的:保护服务器、数据库和其他用户的数据安全。
确保操作符合商业规则和底层逻辑:
库存验证:用户下单时,检查该商品当前库存是否足够,这会涉及并发问题。
余额验证:转账前,检查账户余额是否充足。
状态验证:用户想取消的订单是否已经发货?已发货的订单不能取消。
幂等性验证:防止用户因网络波动而重复提交订单(支付两次)。
目的:保证业务状态正确,避免财务损失和混乱。
一个关键原则:永远不要信任客户端的任何数据!
客户端的验证(前端的JavaScript检查)是为了用户体验(快速提示、减少网络请求),但它极易被绕过(禁用JS、抓包修改、直接发送API请求)。
服务器验证才是真正的安全防线。 即使客户端验证通过,服务器也必须重新验证所有数据,缺少服务器验证的后果可能是灾难性的:
- 直接删除他人数据(权限漏洞)
- 查看他人隐私(越权)
- 用几块钱买到几万块的商品(篡改价格逻辑)
- 带崩整个数据库(SQL注入)
| 验证层面 | 客户端(浏览器/APP) | 服务器(后端) |
| 目的 | 提升体验,减少无效请求 | 保障安全、数据完整、业务正确 |
| 可靠性 | 不可靠(容易被修改) | 可靠(由自己控制) |
| 核心检查 | 必填项、格式提示 | 身份、权限、数据安全、业务逻辑 |
| 用户感知 | 即时提示 | 无感,或返回最终错误码 |
简言之,服务器验证的工作就是:守卫大门(身份认证)、检查包裹(数据合法性)、查看通行证(权限)、防止炸弹(安全漏洞)、确保交易公平(业务逻辑),它是所有线上系统的最后一道、也是最关键的一道防线。
文章摘自:https://idc.huochengrm.cn/js/26120.html
评论
滕巧凡
回复服务器验证确保数据安全、合法,防止未授权访问、数据篡改、越权操作等安全风险,是线上系统的关键防线。
友司
回复服务器验证的工作主要包括确保用户身份的合法性、保护数据安全、防止非法访问和恶意攻击,通过验证用户凭证、检查系统状态和执行安全策略来实现。