ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

后端Web安全实战复盘:SQL注入、XSS、CSRF、越权访问的生产级防护方案

后端Web安全实战复盘:SQL注入、XSS、CSRF、越权访问的生产级防护方案 业务开发重心大多放在功能实现、性能优化上安全校验常常被简化甚至省略。很多安全漏洞不会立刻造成系统崩溃但一旦被利用会出现数据泄露、恶意篡改、账号被盗甚至引发合规风险。安全漏洞很多是开发习惯问题并非高深攻击手段。本文盘点后端项目最容易踩的四大安全大坑附带错误示例、原理讲解、生产可用防护代码帮助团队建立基础安全编码规范。一、后端四大高频安全漏洞1. SQL注入直接拼接用户输入参数到SQL语句攻击者构造特殊字符篡改SQL逻辑查询、删除数据库内敏感数据。常见于字符串拼接SQL、MyBatis中使用${}直接取值。2. XSS跨站脚本攻击用户提交的文本内容不做过滤直接展示在页面。攻击者植入JS脚本其他用户访问页面时脚本执行窃取Cookie、伪造用户操作分为存储型XSS和反射型XSS。3. CSRF跨站请求伪造用户登录网站后访问恶意页面恶意页面自动发起请求利用用户已登录身份执行操作比如修改密码、提交订单、修改资料。4. 权限越权水平越权垂直越权水平越权A用户通过修改参数ID查看/修改B用户数据垂直越权普通用户修改参数访问管理员接口。这是业务系统出现最多的高危漏洞。二、漏洞错误示例与防护代码1. SQL注入防护错误写法直接拼接存在注入// 禁止字符串拼接SQL String 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(\,); content content.replace(,); return content; }3. CSRF防护核心方案接口请求携带Token服务端校验Token。Token绑定用户会话一次性或短时有效。前端请求在header中携带 X-CSRF-Token后端接口校验token合法性GET查询接口一般不做CSRF校验写接口新增、修改、删除强制校验。4. 越权漏洞防护业务最容易忽略错误逻辑只根据前端传的orderId查询订单不校验订单归属人// 危险仅根据id查询可越权查看别人订单 Order order orderMapper.selectById(orderId);正确逻辑查询时带上当前登录用户ID做数据归属校验// 必须增加当前登录用户校验 Order order orderMapper.selectByIdAndUserId(orderId, loginUserId); if(order null){ throw new BusinessException(无权限访问该数据); }核心原则所有数据查询、修改都要校验当前登录用户是否拥有该数据权限不能信任前端传参三、额外安全加固要点接口入参校验参数长度、格式、取值范围拒绝非法超长输入敏感信息脱敏手机号、身份证、银行卡返回前端做脱敏处理密码存储禁止明文存储密码使用BCrypt等不可逆加密算法请求频率限流防止暴力破解账号密码错误页面不返回详细堆栈信息避免泄露系统路径、数据库信息四、安全落地检查清单SQL语句是否全部使用预编译杜绝字符串拼接SQL用户输入内容是否过滤防止XSS脚本注入新增/修改/删除类接口是否开启CSRF Token校验所有数据操作接口是否校验数据归属防止越权访问密码是否加密存储不保存明文敏感数据返回前端是否脱敏对外接口是否做参数校验、接口限流五、总结Web安全防护核心思路就是永远不要信任前端传来的任何参数。绝大多数安全漏洞并非复杂攻击而是开发编码习惯问题。在开发阶段就把注入、XSS、越权、CSRF纳入代码评审标准上线前做安全扫描能规避绝大多数安全事件保护业务数据安全。
返回列表