阐述软件开发中的安全风险与防范机制

阐述软件开发中的安全风险与防范机制

每条包含:定义 + 案例 + 危害 + 防范机制,OWASP Top漏洞

1、越权访问(分为横向越权、纵向越权)

定义:系统鉴权逻辑存在缺陷,用户在自身权限之外访问或操作不属于自己的资源/功能,分为水平(横向)越权、垂直(纵向)越权。

横向越权(水平越权)

定义 :用户角色、权限级别不变,非法访问同权限等级其他用户的数据 ,缺少数据归属校验。

案例 :电商订单查询接口 /api/order?orderId=10086。用户A查看自己订单10086,抓包修改orderId为其他用户的10087。后端仅校验登录状态,没有校验订单归属人,直接返回B用户的订单、手机号、收货地址。

危害 :批量窃取其他用户隐私数据。

防范SQL强制增加归属人条件登录用户ID从Token获取,不接收前端传入;后端鉴权,前端隐藏按钮无效。

纵向越权(垂直越权)

定义 :低权限用户,非法调用高权限角色才允许使用的功能接口 ,缺少角色权限校验。

案例 :管理员删除用户接口 /api/admin/deleteUser?userId=5。普通用户页面没有该操作按钮,抓包直接调用该接口;后端只校验登录,未校验是否管理员角色,普通用户成功删除其他账号。

危害 :普通用户执行管理员高危操作,破坏系统数据。

防范 :RBAC权限模型(RBAC = Role‑Based Access Control,基于角色的访问控制:核心思想:不给用户直接分配权限,把权限绑定到角色,再给用户分配角色),接口增加角色权限注解(基于 AOP 实现);管理接口做后端强制鉴权。

2、SQL注入

定义 :攻击者将恶意SQL片段插入用户输入参数 ,后端直接把输入拼接到SQL语句执行,篡改原有SQL逻辑。

案例:登录接口直接拼接输入:

sql 复制代码
select * from user where username = '${username}' and password='${pwd}'

攻击者用户名输入:' or '1'='1' -- ,拼接后注释掉密码条件,直接绕过登录无需密码进入系统。

危害 :绕过登录、查询篡改数据库、拖库。

防范使用预编译参数化查询 ,MyBatis用#{}(给字符串中单引号做转义处理,并且整体值加引号 ,适用于普通条件参数值),避免${}拼接用户输入(字符串不做转义直接拼进sql,不自动加引号,只适用于动态表名、列名、order by 排序字段,但仍需要对值做白名单校验);数据库账号最小权限;输入过滤校验。

普通条件参数举例 :攻击者输入用户名:' or '1'='1' -- ,密码:123

(1)使用 #

sql 复制代码
-- mybatis sql 语句
select * from user where username = #{username} and password=#{pwd}

-- 最终sql
select * from user where username = '\' or \'1\'=\'1\' -- ' and password='123'

(2)使用 $

sql 复制代码
-- mybatis sql 语句
select * from user where username = '${username}' and password='${pwd}'

-- 最终sql
select * from user where username = '' or '1'='1' -- ' and password='123'

order by 排序字段举例

sortColumn 传入id; delete from user; --,如果不校验 sortColumn ,将导致 user 表被删。

sql 复制代码
-- mybatis sql 语句
select id,name from user order by ${sortColumn}

-- 最终sql
select id,name from user order by id; delete from user; --

3、XSS 跨站脚本攻击

定义 :攻击者注入恶意JS脚本,服务器将恶意代码输出到网页,浏览器执行恶意脚本,分为存储型、反射型、DOM‑XSS。

案例-存储型XSS :评论区提交评论 <script>alert(document.cookie)</script>,后端未过滤存入数据库。其他用户访问页面时,脚本在浏览器执行,窃取用户Cookie。

案例-反射型XSS :搜索接口/search?keyword=xxx,页面直接渲染url传入的keyword;构造恶意链接,用户点开页面直接执行恶意JS。

危害 :盗取会话Cookie、冒充用户身份、钓鱼欺骗。

防范 :输出时转义特殊字符;Cookie设置HttpOnly;配置CSP策略;富文本使用安全过滤库。

4、CSRF 跨站请求伪造

定义 :诱导已经登录目标网站的用户访问恶意页面,利用浏览器自动携带Cookie的特性,伪造用户身份发起非自愿请求

案例 :修改密码接口仅依靠Cookie识别身份。用户登录业务网站后访问恶意网页,网页自动发起请求/api/updatePwd?newPwd=123456;浏览器自动带上业务网站Cookie,后端误认为是本人操作,直接修改账号密码。

危害 :篡改密码、转账、修改个人信息,用户无感知被操作。

防范:关键接口增加CSRF‑Token;校验请求Origin/Referer;高危业务增加验证码二次确认。

5、文件上传漏洞

定义 :文件上传模块校验不严格,攻击者上传可执行脚本文件,服务器解析执行脚本,获取服务器权限。

案例 :头像上传功能,仅前端校验图片后缀。攻击者上传文件命名为mal.jsp.jpg绕过前端;后端只判断后缀,没有校验文件真实内容;上传成功后直接访问文件地址,服务器执行jsp木马脚本。

危害 :上传Web木马,控制服务器,窃取服务器文件。

防范:校验文件真实文件头,不只校验后缀;文件使用UUID重命名;上传目录禁止脚本执行权限;文件存独立静态服务器。

6、命令注入

定义 :后端直接拼接用户输入作为操作系统命令执行,攻击者注入分隔符追加额外系统命令

案例 :后台ping工具,输入IP执行ping命令。攻击者输入:127.0.0.1; cat /etc/passwd;分号分隔多条命令,执行ping后继续读取服务器账号文件。

危害 :执行任意系统命令,读取、篡改服务器本地文件。

防范:禁止拼接用户输入到系统shell命令;优先使用工具库代替Runtime.exec;使用输入白名单。

7、敏感信息泄露

定义 :系统在存储、接口返回、日志、异常堆栈中,直接输出密码、手机号、身份证等敏感数据,造成隐私泄露。

案例1 :用户查询接口直接返回明文身份证、手机号;日志打印密码、Token;生产环境把完整异常堆栈抛给前端,泄露数据库表名、服务器路径。

案例2 :用户密码明文存储数据库,一旦数据库泄露全部账号密码外泄。

危害 :用户隐私泄露,账号安全风险。

防范:密码使用BCrypt等哈希加盐存储;接口敏感字段脱敏;日志屏蔽密码、token;生产关闭详细异常堆栈输出;传输使用HTTPS。

8、身份认证与会话管理风险

定义 :登录认证、会话Token设计不合理,存在会话劫持、会话固定、Token长期不失效等问题,造成账号被盗。

案例 :登录Token设置永久有效期,攻击者拿到Token可以永久登录账号;会话固定:攻击者预先设置一个sessionId,诱导用户登录,登录后sessionId不变,攻击者直接复用该sessionId登录受害者账号。

危害 :会话劫持,账号被盗。

防范:Token设置合理过期时间;登出销毁Token;登录成功刷新会话ID;高危操作增加验证码。

9、SSRF 服务端请求伪造

定义 :业务存在服务端发起网络请求的功能,攻击者传入自定义URL,由服务器代替攻击者发起请求 ,探测、攻击内网资源。攻击者本身无法访问内网,借助服务器作为跳板。

案例 :图片抓取接口,接收用户传入url由后端下载图片;攻击者传入内网地址http://127.0.0.1:3306,服务器访问本地及内网服务,扫描内网端口,读取内部接口数据。

危害 :内网探测、访问内部服务,造成内网数据泄露。

防范:拦截回环地址、内网网段;设置访问白名单;关闭重定向跟随;设置请求超时。

10、重放攻击

定义攻击者抓包获取合法业务请求 ,在不修改报文内容的情况下,反复重复提交该请求 ,破坏业务逻辑。

案例 :支付下单接口没有防重放机制,抓包拿到完整支付请求报文,反复提交数据包,造成同一订单多次扣款、重复下单。

危害 :重复下单、重复扣款,业务逻辑错乱。

防范请求携带timestamp时间戳 + nonce随机串,校验时间窗口;业务接口实现幂等;数据库增加唯一索引。

11、CORS跨域配置不当

定义 :后端跨域资源共享CORS配置错误,允许不受信任的外部域名跨域访问并携带Cookie,导致第三方网站窃取业务数据。

案例 :后端配置Access‑Control‑Allow‑Origin: *,同时开启允许携带Cookie;恶意网站发起跨域AJAX请求,浏览器自动带上用户Cookie,后端返回业务数据被恶意网站窃取。

危害 :跨域窃取用户业务数据。

防范 :配置具体可信域名,禁止直接使用通配符*;Cookie配合SameSite属性。


通用安全开发原则

  1. 永远不信任前端传来的任何输入,所有校验、鉴权必须在后端实现;
  2. 最小权限原则:数据库账号、接口权限、文件权限尽量收敛;
  3. 敏感数据加密存储,传输全部使用HTTPS;
  4. 业务接口做好幂等,防止重复提交;
  5. 错误提示只返回业务提示,不要把内部堆栈、路径、表名对外暴露。
相关推荐
Latticy4 小时前
vulnhub系列靶机-mrRobot
web安全·网络安全·渗透测试
白猫不黑7 小时前
网络安全/信息安全专业学习路线与入行指南:从大学到岗位的完整规划
网络·学习·安全·web安全·网络安全·黑客技术
xierui1231238 小时前
AI Agent 隐私架构:本地化重点为什么是登录态与执行权限
java·人工智能·网络安全·架构
Chockmans10 小时前
春秋云境CVE-2025-49113
安全·web安全·网络安全·网络攻击模型·安全威胁分析·春秋云境·cve-2025-49113
白猫不黑10 小时前
从运维到网络安全:转行优势、路径与薪资前景全解析
运维·网络·web安全·网络安全·信息安全·渗透测试
AI备忘录11 小时前
(十一)DHCP 配置命令五厂商对照:华为 华三 锐捷 迈普 思科
服务器·网络·网络协议·网络安全·华为
0xBADCODE12 小时前
Flask SSTI读SECRET_KEY+伪造Session:税务系统渗透全流程
前端·后端·python·安全·web安全·网络安全·flask
网安蟹佬霸1 天前
OSINT开源情报收集实战:从信息搜集到资产测绘(2026最新万字保姆级指南)
前端·网络·安全·web安全·网络安全·开源
游戏开发爱好者81 天前
WebSocket 抓包怎么查看内容?从握手到消息帧完整解读
网络协议·计算机网络·网络安全·ios·adb·https·udp