后端Web安全实战复盘:SQL注入、XSS、CSRF、越权访问的生产级防护方案
2026-09-30
81
业务开发重心大多放在功能实现、性能优化上,安全校验常常被简化甚至省略。很多安全漏洞不会立刻造成系统崩溃,但一旦被利用,会出现数据泄露、恶意篡改、账号被盗,甚至引发合规风险。 安全漏洞很多是开发习惯问题,并非高深攻击手段。本文盘点后端项目最容易踩的四大安全大坑,附带错误示例、原理讲解、生产可用防护代码,帮助团队建立基础安全编码规范。一、后端四大高频安全漏洞1. SQL注入直接拼接用户输入参数到SQL语句,攻击者构造特殊字符,篡改SQL逻辑,查询、删除数据库内敏感数据。常见于字符串拼接SQL、MyBatis中使用${}直接取值。2. XSS跨站脚本攻击用户提交的文本内容不做过滤,直接展示在页面。攻击者植入JS脚本,其他用户访问页面时脚本执行,窃取Cookie、伪造用户操作,分为存储型XSS和反射型XSS。3. CSRF跨站请求伪造用户登录网站后,访问恶意页面,恶意页面自动发起请求,利用用户已登录身份执行操作,比如修改密码、提交订单、修改资料。4. 权限越权(水平越权+垂直越权)水平越权:A用户通过修改参数ID,查看/修改B用户数据;垂直越权:普通用户修改参数,访问管理员接口。这是业务系统出现最多的高危漏洞。二、漏洞错误示例与防护代码1. SQL注入防护错误写法(直接拼接,存在注入)// 禁止!字符串拼接SQLString sql = "select * from user where username = '" + username + "'";正确方案:使用预编译参数,MyBatis使用#{}占位符<!-- 使用#{},参数预编译,防止注入 -->2. XSS防护后端统一对用户输入进行转义过滤,过滤script、onclick等危险标签与事件;前端输出时开启转义。// 简单工具方法,对输入内容做html转义public static String htmlEscape(String content){ if(content == null) return null; content = content.replace("&","&"); content = content.replace("<","<"); content = content.replace(">",">"); content = content.replace("