后端必须独立校验所有关键数值,因前端数据完全可控;需验证类型、业务范围、数据库一致性,并记录日志与风控;核心计算(如伤害值)必须在服务端完成,前端仅传指令。

因为前端传来的数值可以被用户任意修改,完全不可控。
用户能直接篡改任何前端数据
表单字段、隐藏域、JavaScript变量、甚至API请求体里的数字——全都可以用浏览器开发者工具、抓包软件(如Burp Suite)或自制脚本瞬间改掉。比如一个游戏里“金币数量=500”,用户只要把请求里的gold=500改成gold=999999再发出去,后端如果照单全收,就等于直接送钱。
前端验证只是体验优化,不是安全防线
用JavaScript检查“金币不能为负数”或“等级不能超过100”,只能防止普通玩家手误,对恶意用户毫无约束力。他们根本不会走你写的校验逻辑,而是绕过页面,直接向接口发请求。前端校验的作用是提升交互友好性,不是守住服务器大门。
后端必须独立做完整校验和逻辑判定
所有关键数值都要在PHP端重新验证:
• 检查是否为合法数字类型(用is_int()或filter_var($val, FILTER_VALIDATE_INT))
• 核对数值是否在合理业务范围内(例如玩家当前等级能否支持本次升级消耗)
• 关联数据库状态做一致性判断(比如扣金币前先查余额,用事务保证原子性)
• 敏感操作记录日志,异常高频修改自动触发风控
别让客户端参与核心计算
像“伤害值 = 攻击力 × 技能系数 − 防御力”这类公式,绝不能只在前端算完再传结果。攻击者会反编译JS、伪造高攻击力或负防御力,直接提交离谱的伤害数字。正确做法是前端只传动作指令(如“使用火球术攻击ID=123”),由PHP根据双方实时属性和服务端规则重新计算并写库。
立即学习“PHP免费学习笔记(深入)”;



















