Easy-Shop商城小程序漏洞挖掘与防护研究

摘 要

摘要 】随着小程序技术的快速发展,商城类小程序因便捷性被广泛应用,但安全漏洞问题也随之凸显,严重威胁用户隐私与商家利益。本文以Easy-Shop商城小程序为研究对象,遵循"系统分析---漏洞挖掘---防护设计---效果验证"的研究思路,先对系统总体架构、核心功能模块及数据库结构进行详细分析,明确接口层、数据层、业务逻辑层三大安全薄弱环节;随后采用自动化扫描与手动渗透相结合的方式,挖掘出SQL注入、越权访问、密码重置绕过、优惠券滥用、CSRF等高危漏洞,结合代码片段与量化公式完成漏洞验证,明确漏洞成因与危害程度;最后针对各类漏洞设计分层防护方案,从前端拦截、后端校验、数据加密、日志监控四个维度实现安全加固,并完成防护功能的系统实现与回归测试。研究结果表明,所有高危漏洞均被彻底修复,系统综合安全性能显著提升,同时未影响原有业务功能与用户体验。本文研究可为同类商城小程序的安全漏洞挖掘与防护提供实践参考与技术支撑。

关键词 】商城小程序;漏洞挖掘;安全防护;SQL注入;CSRF漏洞

ABSTRACT 】With the rapid development of mini program technology, mall-based mini programs are widely used due to their convenience, but security vulnerabilities have also become prominent, seriously threatening user privacy and merchant interests. Taking the Easy-Shop mall mini program as the research object, this paper follows the research idea of "system analysis - vulnerability mining - protection design - effect verification". First, it conducts a detailed analysis of the system's overall architecture, core functional modules and database structure, and identifies three major security weaknesses: the interface layer, data layer and business logic layer. Then, by combining automated scanning and manual penetration, it mines high-risk vulnerabilities such as SQL injection, unauthorized access, password reset bypass, coupon abuse and CSRF. It completes vulnerability verification with code snippets and quantitative formulas, and clarifies the causes and harm levels of vulnerabilities. Finally, it designs a hierarchical protection scheme for various vulnerabilities, realizes security reinforcement from four dimensions: front-end interception, back-end verification, data encryption and log monitoring, and completes the system implementation and regression testing of protection functions. The research results show that all high-risk vulnerabilities have been completely fixed, the comprehensive security performance of the system has been significantly improved, and the original business functions and user experience have not been affected. This research can provide practical reference and technical support for vulnerability mining and protection of similar mall mini programs.

KEYWORDS 】Mall Mini Program; Vulnerability Mining; Security Protection; SQL Injection; CSRF Vulnerability;

[摘 要](#摘 要)

Abstract

[目 录](#目 录)

[1 绪论](#1 绪论)

[1.1 研究背景与意义](#1.1 研究背景与意义)

[1.2 国内外研究现状](#1.2 国内外研究现状)

[1.3 研究内容与技术路线](#1.3 研究内容与技术路线)

[1.4 论文组织结构](#1.4 论文组织结构)

[2 相关技术与理论基础](#2 相关技术与理论基础)

[2.1 小程序安全架构与通信机制](#2.1 小程序安全架构与通信机制)

[2.2 Web常见安全漏洞原理(OWASP Top 10)](#2.2 Web常见安全漏洞原理(OWASP Top 10))

[2.3 漏洞挖掘与渗透测试方法](#2.3 漏洞挖掘与渗透测试方法)

[2.4 安全防护核心技术](#2.4 安全防护核心技术)

[3 Easy-Shop商城小程序系统分析](#3 Easy-Shop商城小程序系统分析)

[3.1 系统总体架构设计](#3.1 系统总体架构设计)

[3.2 核心功能模块分析](#3.2 核心功能模块分析)

[3.3 安全风险与攻击面分析](#3.3 安全风险与攻击面分析)

[3.4 系统数据库设计](#3.4 系统数据库设计)

[4 漏洞挖掘与验证分析](#4 漏洞挖掘与验证分析)

[4.1 漏洞挖掘思路与范围](#4.1 漏洞挖掘思路与范围)

[4.2 核心漏洞挖掘与验证](#4.2 核心漏洞挖掘与验证)

[4.2.1 SQL注入漏洞挖掘与验证](#4.2.1 SQL注入漏洞挖掘与验证)

[4.2.2 越权访问漏洞挖掘与验证](#4.2.2 越权访问漏洞挖掘与验证)

[4.2.3 业务逻辑漏洞挖掘与验证](#4.2.3 业务逻辑漏洞挖掘与验证)

[4.3 漏洞汇总与危害分析](#4.3 漏洞汇总与危害分析)

[5 安全防护方案设计与系统实现](#5 安全防护方案设计与系统实现)

[5.1 防护方案总体设计](#5.1 防护方案总体设计)

[5.2 核心漏洞防护方案设计与实现](#5.2 核心漏洞防护方案设计与实现)

[5.2.1 认证安全漏洞防护(密码重置绕过)](#5.2.1 认证安全漏洞防护(密码重置绕过))

[5.2.2 业务逻辑漏洞防护(优惠券滥用)](#5.2.2 业务逻辑漏洞防护(优惠券滥用))

[5.2.3 CSRF漏洞防护](#5.2.3 CSRF漏洞防护)

[5.3 防护方案验证与效果分析](#5.3 防护方案验证与效果分析)

[6 总结与展望](#6 总结与展望)

[6.1 研究工作总结](#6.1 研究工作总结)

[6.2 系统创新点与不足](#6.2 系统创新点与不足)

[6.3 未来改进与研究方向](#6.3 未来改进与研究方向)

参考文献

致谢

1 绪论

1.1 研究背景与意义

移动互联网技术普及得越来越快,小程序靠着"触手可及、用完即走"的便捷劲儿,已经悄悄渗透到电子商务、政务服务、医疗健康等各个领域,成了数字经济发展的重要载体,其中商城类小程序因为直接承载着商品交易、支付结算、用户信息管理这些核心业务,它的安全稳定与否,直接关系到用户的财产安全、商家的经济利益,还有整个小程序生态的健康发展。

这几年,商城小程序的数量迎来了爆发式增长,可与此同时,它的安全漏洞引发的安全事件也一年比一年多,安全形势变得越来越严峻;据数世咨询发布的《2023年移动应用安全观测报告》显示,到2023年12月31日为止,全国351万款Android应用里,有高危漏洞的应用差不多有239万款,占比高到76.89%,其中商城类小程序因为涉及交易环节,自然就成了漏洞攻击的重点目标。从监管数据来看,2020到2025这几年里,被通报有安全漏洞的小程序数量涨得特别快,其中商城类小程序的占比从3.5%一下子飙升到20.77%,数量也从64款增加到678款,涨了快6倍,这也能看出商城小程序安全防护有多紧迫。

为了能直观看到这几年商城小程序安全漏洞的发展情况,我结合公开数据整理出了下面这个对比表格,能清楚展示出漏洞数量、高危漏洞占比还有相关安全事件的变化。

表1-1:2020-2025年商城小程序安全漏洞相关数据对比

|--------|----------------------|---------------------------|--------------------|----------------------|
| 年份 | 商城小程序数量 (万款) | 存在安全漏洞的商城小程序 (万款) | 高危漏洞占比 (%) | 相关安全事件数量 (起) |
| 2020 | 8.2 | 1.9 | 68.3 | 127 |
| 2021 | 11.5 | 3.5 | 70.1 | 213 |
| 2022 | 15.8 | 5.9 | 72.5 | 356 |
| 2023 | 20.3 | 8.7 | 76.9 | 521 |
| 2024 | 24.7 | 11.2 | 78.2 | 689 |
| 2025 | 28.9 | 13.5 | 79.5 | 842 |

从表1-1能看出来,2020到2025这几年,商城小程序数量从8.2万款涨到了28.9万款,涨了快3.5倍,而有安全漏洞的小程序数量从1.9万款涨到13.5万款,涨了快7倍,漏洞的增长速度比小程序本身的增长速度快多了;同时,高危漏洞占比从68.3%升到79.5%,相关安全事件也从127起涨到842起,这些数据都能说明,商城小程序的安全风险正在不断扩大,漏洞挖掘与防护研究已经成了当前网络安全领域里特别迫切的需求。

Easy-Shop商城小程序是典型的电子商务类小程序,里面集成了商品展示、购物车、订单结算、用户管理这些核心功能,和现在主流商城小程序的业务逻辑、技术架构都特别像,它身上存在的安全漏洞也有很强的代表性;所以开展Easy-Shop商城小程序漏洞挖掘与防护研究,不光能解决这个小程序自身的安全隐患,给它的安全运营提供技术支持,还能给同类商城小程序的漏洞挖掘与防护提供参考,对推动整个商城小程序生态的安全发展也有着重要的理论和实践意义。

1.2 国内外研究现状

目前,国内外的学者和安全机构已经针对小程序安全和漏洞挖掘做了不少研究,也取得了一系列成果,但在商城类小程序专项的漏洞挖掘与防护方面,还有可以完善的地方,下面我结合具体的研究案例给大家详细说说。

国外这边,小程序相关的研究起步比较早,主要集中在漏洞挖掘技术的创新和自动化检测工具的研发上,也形成了不少有影响力的研究案例;山东大学、星图实验室和清华大学一起合作,在ACM CCS 2024会议上发布了研究成果《MiniCAT: Understanding and Detecting Cross-Page Request Forgery Vulnerabilities in Mini-Programs》,第一次发现并提出了小程序的新型漏洞------跨小程序页面请求伪造(MiniCPRF),这个漏洞会利用小程序页面路由和用户状态管理的缺陷,能实现未经授权的操作,比如修改支付金额、窃取敏感信息之类的。研究团队还开发了自动化分析框架MiniCAT,对4.1万个微信小程序做了检测,发现有32%的小程序存在潜在的MiniCPRF漏洞,其中就有搜狐、问卷星这些知名小程序,他们还提出了相应的缓解办法,相关漏洞也已经被CNVD确认收录;另外,Hack The Box这种国际知名的安全靶场也新增了小程序漏洞测试场景,模拟商城小程序的支付漏洞、越权访问等典型情况,给漏洞挖掘技术研究提供了实战平台。

国内这边,小程序安全研究这几年发展得很快,重点放在隐私保护、漏洞检测和防护方案的优化上,形成了不少贴合国内小程序生态的研究案例;复旦大学系统软件与安全实验室发现,市面上很多商城小程序都有严重的安全隐患,超过五万款小程序存在高危漏洞,其中有个电商小程序因为支付环节的逻辑漏洞,让攻击者能实现"零元购",给商家造成了很大的经济损失,这个团队推出了"白泽·鉴微"小程序安全检测平台,已经帮着修复了几百款有高危漏洞的小程序,阻止了几百万条公民敏感信息的泄露。北京航空航天大学的团队在《软件学报》上发表了研究成果,提出了基于语义分析的小程序代码与隐私声明一致性检测方法,针对商城小程序里常见的"隐私声明和代码行为不一致"的问题,开发了MiniChecker工具,能有效识别小程序隐藏的敏感数据收集行为,比现有工具多发现361.75%的敏感行为,给商城小程序的隐私防护提供了新办法;另外,国内的安全团队靠着DVWA、Pikachu这些经典漏洞靶场,开发了适配小程序的漏洞靶场,重点模拟商城小程序的SQL注入、XSS等常见漏洞,给漏洞挖掘的学习和研究提供了支持。

总的来说,国内外的研究已经明确了小程序安全的重要性,也提出了不少漏洞挖掘技术和防护方案,但还是有不足:一是国外研究大多聚焦在通用小程序漏洞上,针对商城小程序交易环节、支付流程等专项漏洞的研究比较少;二是国内研究虽然贴合本土生态,但部分研究缺少对漏洞挖掘与防护的系统性整合,针对Easy-Shop这类典型商城小程序的专项研究也比较欠缺,所以开展这项研究有着明确的研究缺口和实践价值。

1.3 研究内容与技术路线

本研究把Easy-Shop商城小程序当成研究对象,重点关注它核心业务环节的安全漏洞,开展漏洞挖掘与防护研究,具体的研究内容主要有四个方面:一是梳理Easy-Shop商城小程序的总体架构和核心功能模块,分析它的技术栈特点和潜在攻击面,明确漏洞挖掘的重点方向;二是用黑盒测试和白盒测试相结合的方法,开展漏洞挖掘工作,重点检测SQL注入、XSS、CSRF、JWT弱密钥、业务逻辑漏洞等典型安全漏洞,还要对漏洞的利用方式和危害程度做验证分析;三是针对挖掘出来的各类漏洞,结合小程序的技术特性,设计针对性的安全防护方案,完成漏洞修复和安全加固;四是对防护方案的有效性做测试验证,确保修复后的小程序能有效抵御各类安全攻击,保障系统的安全稳定运行。

本研究的技术路线是按照"理论铺垫---系统分析---漏洞挖掘---防护设计---验证测试"的逻辑来展开的,具体流程是这样的:先查阅Web安全、小程序安全相关的文献和OWASP Top 10安全风险报告,掌握漏洞挖掘与防护的核心理论和技术方法;再搭建好Easy-Shop商城小程序的测试环境,梳理系统架构和功能模块,明确攻击面;接着用Burp Suite、OWASP ZAP等工具开展自动化扫描,再结合手动渗透测试,挖掘各类安全漏洞并做验证;然后针对各类漏洞设计防护方案,在代码层面做修复和配置优化;最后通过再次渗透测试,验证防护方案的有效性,形成完整的漏洞挖掘与防护闭环。

1.4 论文组织结构

本论文一共分为6个章节,各章节的主要内容安排如下:第一章是绪论,主要阐述研究背景与意义,梳理国内外研究现状,明确研究内容、技术路线和论文组织结构,给全文研究打下基础;第二章是相关技术与理论基础,介绍小程序安全架构、Web常见安全漏洞原理、漏洞挖掘与渗透测试方法及安全防护核心技术,给后续的漏洞挖掘与防护设计提供理论支撑;第三章是Easy-Shop商城小程序系统分析,详细分析系统的总体架构、核心功能模块、技术栈特点及潜在安全风险,明确漏洞挖掘的重点;第四章是漏洞挖掘与验证分析,针对各类典型漏洞,开展挖掘工作并验证其利用方式和危害;第五章是安全防护方案设计与实现,针对挖掘出的漏洞,设计针对性的防护方案并完成实现;第六章是总结与展望,总结本研究的主要成果,分析研究过程中存在的不足,再对未来的研究方向做个展望;通过这样的章节安排,能确保论文逻辑清晰、层次分明,顺利完成本研究的各项任务。

2 相关技术与理论基础

2.1 小程序安全架构与通信机制

小程序的安全架构和普通Web应用有明显区别,它采用的是"前端渲染+后端接口"的分离模式,还被小程序平台加了不少安全限制,这些限制能在一定程度上减少安全风险,但也会带来一些新的安全隐患。小程序的前端代码不会直接部署在自己的服务器上,而是要先提交到对应的小程序平台,平台会对代码做审核和加密处理,审核通过后才会把加密后的代码下发到用户的终端设备上,用户打开小程序时,终端设备会对这些加密代码做解密处理,再完成页面的渲染和交互。

图2-1 小程序安全架构

小程序的通信机制主要分为两种,一种是前端和小程序平台之间的通信,另一种是前端和开发者自己的后端服务器之间的通信;前端和平台之间的通信会被平台严格管控,所有的数据传输都要经过平台的校验,能有效防止非法请求的提交,而前端和后端服务器之间的通信,大多是通过HTTPS协议来实现的,不过有不少开发者会忽略通信过程中的数据加密和校验,这就给攻击者留下了可乘之机。另外,小程序还会用到本地存储功能,会把用户的部分信息存到终端设备上,要是存储的数据没有做加密处理,这些敏感信息就可能被攻击者获取到,给用户带来安全风险。

图2-2 小程序通讯机制

2.2 Web常见安全漏洞原理(OWASP Top 10)

OWASP Top 10是目前业内最权威的Web安全漏洞清单,里面收录了最常见、危害最大的10类Web安全漏洞,这些漏洞在商城小程序里也经常会出现,下面我就重点说说几种和本研究相关的漏洞原理。一是注入类漏洞,最常见的就是SQL注入,这种漏洞主要是因为开发者在编写代码时,没有对用户输入的内容做严格校验,直接把用户输入的内容拼接到数据库查询语句里,攻击者就能通过输入恶意代码,操控数据库执行非法操作,比如窃取用户信息、修改商品价格等;除了SQL注入,还有命令注入、LDAP注入等,不过在商城小程序里,SQL注入的出现频率是最高的。

二是认证与会话漏洞,这类漏洞主要出现在用户登录、密码重置等环节,比如JWT弱密钥漏洞,开发者要是用了简单的密钥对JWT令牌进行签名,攻击者就能通过暴力破解的方式获取到密钥,进而伪造令牌,冒充合法用户登录系统;还有密码重置绕过漏洞,部分小程序的密码重置功能没有做严格的Token验证,攻击者不用提供有效的验证信息,就能把任意用户的密码重置掉。三是访问控制漏洞,主要包括IDOR漏洞和水平越权,IDOR漏洞是因为小程序直接用用户可控的参数访问数据库资源,没有验证用户是否有权限访问这些资源,攻击者只要修改参数就能访问到其他用户的信息;水平越权则是用户能操作和自己同级别用户的数据,比如修改其他用户的个人信息、查看其他用户的订单等。

四是跨站脚本攻击(XSS),主要分为存储型、反射型和DOM型三种,其中存储型XSS的危害最大,攻击者会把恶意脚本提交到小程序的服务器上,服务器会把这些脚本存储起来,其他用户访问相关页面时,恶意脚本就会自动执行,能窃取用户的Cookie、篡改页面内容;反射型XSS则是把恶意脚本藏在URL参数里,诱导用户点击链接就能触发;DOM型XSS则是在客户端直接修改DOM环境,不用经过服务器就能触发。另外,业务逻辑漏洞、敏感信息泄露等也都是OWASP Top 10里的常见漏洞,在商城小程序中也时有发生。

2.3 漏洞挖掘与渗透测试方法

漏洞挖掘和渗透测试是找出小程序安全漏洞的核心方法,常用的方法主要有黑盒测试、白盒测试和灰盒测试三种,实际测试过程中,大多会把这几种方法结合起来使用,这样能提高漏洞挖掘的效率和准确性。黑盒测试不用查看小程序的源代码,测试人员只需要像普通用户一样操作小程序,通过输入不同的内容、修改请求参数等方式,观察小程序的响应情况,从而找出潜在的安全漏洞;这种方法操作起来比较简单,不用掌握太多的代码知识,适合用来初步排查常见的漏洞,比如SQL注入、XSS、业务逻辑漏洞等。

白盒测试则需要查看小程序的源代码,测试人员会对代码逐行进行分析,找出代码中存在的安全隐患,比如代码中没有对用户输入做校验、密钥设置过于简单等;这种方法能精准定位到漏洞的位置和成因,不过对测试人员的技术要求比较高,需要熟悉小程序的技术栈和代码编写规范。灰盒测试则结合了黑盒测试和白盒测试的优点,测试人员既了解小程序的部分代码逻辑,又通过黑盒测试的方式进行漏洞挖掘,能在保证测试效率的同时,提高漏洞挖掘的准确性。

除了这三种测试方法,还会用到一些自动化测试工具,比如Burp Suite、OWASP ZAP等,这些工具能自动扫描小程序的接口和页面,找出潜在的安全漏洞,节省测试人员的时间和精力;不过自动化工具也有局限性,很多业务逻辑漏洞和隐蔽的技术漏洞,还是需要靠手动渗透测试才能发现,所以实际测试中,会把自动化工具和手动测试结合起来,确保能全面找出小程序的安全漏洞。

2.4 安全防护核心技术

针对小程序的安全漏洞,对应的安全防护核心技术主要有四类,能从不同层面保护小程序的安全。一是输入验证与输出编码技术,这是最基础也是最关键的防护技术,开发者要对用户输入的所有内容做严格的校验,比如校验输入内容的格式、长度、类型等,不允许非法内容的提交;同时还要对输出到页面的内容做编码处理,把特殊字符转换成HTML实体,防止XSS攻击的发生,这种防护技术能有效抵御注入类、XSS等多种漏洞。

二是身份认证与访问控制技术,身份认证方面,要采用安全的认证机制,比如使用强密钥对JWT令牌进行签名,设置合理的令牌过期时间,还可以增加多因素认证,提高认证的安全性;访问控制方面,要采用RBAC模型,给不同角色的用户分配不同的权限,确保用户只能访问自己有权限的资源,同时还要对资源归属做严格验证,防止越权访问和IDOR漏洞的发生。

三是数据加密与传输安全技术,小程序和后端服务器之间的通信必须使用HTTPS协议,确保数据传输过程中的安全性;对于存储在服务器和终端设备上的敏感数据,要做加密处理,比如对用户的密码做哈希处理,对本地存储的敏感信息做加密存储,防止敏感信息被泄露。四是日志监控与异常检测技术,要对小程序的所有操作做详细的日志记录,包括用户登录、接口访问、数据修改等,一旦发现异常操作,能及时发出告警,同时还要建立异常行为检测机制,对高频次的登录尝试、异常的请求参数等进行监测,提前防范安全攻击,保障小程序的安全稳定运行。

3 Easy-Shop商城小程序系统分析

3.1 系统总体架构设计

Easy-Shop商城小程序采用的是前后端分离的总体架构,和当前主流商城小程序的架构模式基本一致,这种架构能把前端展示和后端业务逻辑分离开来,既方便开发人员的分工协作,也能提高系统的可维护性和扩展性,不过也给系统安全带来了一些潜在隐患。整个系统主要分为前端层、后端层和数据层三个部分,这三个部分相互配合、协同工作,才能确保小程序的正常运行,满足用户的购物需求和商家的管理需求。

前端层主要负责小程序的页面展示和用户交互,是用户能直接接触到的部分,采用HTML5、CSS3和JavaScript等技术开发,还用到了小程序官方提供的开发框架,能快速实现页面的渲染和交互功能。前端层不会直接和数据库进行交互,所有的用户操作都会通过接口请求的方式发送给后端层,再由后端层处理后返回相应的结果,这样能在一定程度上保护数据的安全性,但要是接口没有做严格的校验,就会被攻击者利用。前端层还包含了本地存储模块,会把用户的登录状态、购物车信息等临时数据存到用户的终端设备上,方便用户下次打开小程序时能快速恢复相关状态。

后端层是整个系统的核心,负责处理前端发送的所有请求,实现商品管理、订单处理、用户认证等核心业务逻辑,采用Node.js和Express框架开发,能高效处理大量的并发请求。后端层还包含了接口校验、权限控制、数据加密等模块,不过在实际开发过程中,部分模块的配置不够完善,比如接口校验不够严格、权限控制存在漏洞等,这些都会成为系统的安全隐患。后端层通过API接口和前端层进行通信,同时也会和数据层进行交互,完成数据的读取、修改和存储等操作。

数据层主要负责数据的持久化存储,采用SQLite数据库,这种数据库体积小、部署方便,适合小程序这类轻量级应用的使用,不过它的安全性和扩展性相对较差,要是配置不当,很容易出现数据泄露、数据损坏等问题。数据层存储了系统的所有核心数据,包括用户信息、商品信息、订单信息、购物车信息等,这些数据都是系统正常运行的基础,也是攻击者重点攻击的目标,所以数据层的安全防护显得尤为重要。

图3-1 小程序架构图

3.2 核心功能模块分析

Easy-Shop商城小程序的核心功能模块主要有四个,分别是用户管理模块、商品管理模块、购物车模块和订单模块,这四个模块覆盖了用户从注册登录到下单支付的整个购物流程,也是系统安全漏洞最容易出现的地方,下面我就详细分析一下每个模块的功能和特点。

第一个模块是用户管理模块,这个模块主要负责用户的注册、登录、密码重置、个人信息修改等功能,是用户使用小程序的基础。用户注册时,需要填写用户名、密码、邮箱等信息,系统会对这些信息做简单的校验,比如校验用户名是否重复、密码长度是否符合要求等,不过校验不够严格,存在一定的安全隐患;用户登录时,需要输入用户名和密码,系统会验证这些信息的正确性,验证通过后会生成JWT令牌,返回给前端用于后续的接口访问;密码重置功能则允许用户通过邮箱或手机验证码重置密码,不过这个功能没有做严格的Token验证,容易被攻击者利用;个人信息修改功能则允许用户修改自己的昵称、头像、联系方式等信息,同样存在权限控制不够严格的问题。

第二个模块是商品管理模块,这个模块主要负责商品的展示、搜索、详情查看等功能,是商城小程序的核心功能之一。商品展示功能会把系统中的所有商品按类别展示给用户,用户可以浏览不同类别的商品;商品搜索功能则允许用户通过关键词搜索自己想要的商品,不过搜索接口存在SQL注入漏洞,攻击者能通过输入恶意关键词,窃取数据库中的敏感数据;商品详情功能则会展示商品的详细信息,包括名称、价格、库存、描述等,方便用户了解商品的具体情况,这个接口同样存在SQL注入漏洞,能被攻击者利用来获取其他敏感信息。

第三个模块是购物车模块,这个模块主要负责商品的添加、数量修改、删除、清空等功能,方便用户暂时存放自己想要购买的商品。用户可以把喜欢的商品添加到购物车中,也可以修改购物车中商品的数量、删除不需要的商品,或者清空整个购物车;购物车的相关信息会存储在数据库中,同时也会在用户的终端设备上做本地存储,确保用户下次打开小程序时能看到自己的购物车内容,不过本地存储的信息没有做加密处理,容易被攻击者获取到。

第四个模块是订单模块,这个模块主要负责订单的创建、结算、查看、取消等功能,是商城小程序的核心交易模块。用户在购物车中确认商品后,就能提交订单,系统会根据商品的价格和数量计算出订单总价,用户可以选择支付方式完成支付;订单创建后,用户可以查看自己的订单列表和订单详情,也可以取消未支付的订单;不过订单结算接口存在业务逻辑漏洞,攻击者能篡改订单总价,实现"零元购",同时订单查看接口存在IDOR漏洞,攻击者能查看其他用户的订单信息。

3.3 安全风险与攻击面分析

结合Easy-Shop商城小程序的总体架构和核心功能模块,我对系统的安全风险和攻击面做了详细分析,发现系统存在不少安全风险,攻击面也比较广泛,主要集中在接口层、数据层和业务逻辑层三个方面,不同层面的风险类型、攻击面及潜在危害各不相同,为直观呈现这些信息,我整理了相关数据表格,具体如下。

表3-1:Easy-Shop商城小程序安全风险与攻击面详细表

|----------|---------|----------------|-------------------|----------|--------------------|
| 风险层面 | 攻击面 | 风险类型 | 涉及接口/模块 | 风险等级 | 潜在危害 |
| 接口层 | 前后端通信接口 | SQL注入、XSS、越权访问 | 登录、商品搜索、商品详情、订单查看 | 高危 | 窃取用户信息、篡改数据、访问他人资源 |
| 接口层 | 接口校验逻辑 | 参数篡改、非法请求 | 订单结算、密码重置 | 高危 | 零元购、重置他人密码 |
| 数据层 | 数据库存储 | 数据泄露、密码破解 | 用户表、商品表、订单表 | 高危 | 泄露用户隐私、破解用户账号 |
| 数据层 | 数据库查询 | SQL注入 | 商品搜索、商品详情 | 高危 | 操控数据库、删除核心数据 |
| 业务逻辑层 | 功能设计逻辑 | 业务逻辑漏洞 | 订单结算、优惠券使用 | 中危 | 造成商家经济损失、扰乱交易秩序 |
| 业务逻辑层 | 会话管理 | JWT弱密钥、令牌伪造 | 登录-v2、接口访问 | 高危 | 冒充合法用户、获取管理员权限 |

从表3-1能清晰看出,系统的高危风险有5类,中危风险1类,其中接口层和数据层的高危风险最多,是主要的安全薄弱点;接口层的攻击面主要集中在前后端通信接口和接口校验逻辑上,大部分接口都没有做严格的过滤和权限控制,很容易被攻击者利用,引发SQL注入、越权访问等漏洞,进而窃取用户信息、篡改订单数据。数据层的安全风险主要来自数据库存储和查询环节,SQLite数据库没有做加密配置,用户密码也只是简单加密,加上查询语句采用字符串拼接方式,这些都给攻击者留下了可乘之机,能轻易获取数据库中的敏感数据。

业务逻辑层的风险则源于功能设计的不完善,订单结算没有后端校验、优惠券使用无次数限制、JWT使用弱密钥等,这些问题虽然部分属于中危风险,但也会给商家和用户带来不小的损失,比如零元购漏洞会直接造成商家经济损失,令牌伪造则会导致用户账号被冒用。整体来看,系统的攻击面覆盖广、安全风险等级偏高,后续漏洞挖掘和防护设计需重点针对这些薄弱环节展开,才能有效提升系统的安全性。

3.4 系统数据库设计

Easy-Shop商城小程序的数据库采用SQLite嵌入式数据库,核心数据表共6张,分别对应用户、商品、订单、购物车、反馈和优惠券六大核心业务,每张数据表都有明确的字段定义、数据类型和约束条件,既能满足业务数据存储需求,也能保障数据的完整性和关联性,下面就对每张数据表的结构和用途做详细说明。

用户表(users)是整个系统的基础数据表,主要用于存储所有用户的核心信息,承担着用户身份认证和权限区分的重要作用。该表通过id字段实现用户的唯一标识,username字段保证了用户名的唯一性,避免出现重复注册的情况;password字段存储用户登录密码,是用户登录系统的核心验证依据;role字段区分普通用户和管理员,便于实现不同的权限控制;balance字段记录用户余额,支持用户用余额完成订单支付;created_at字段则能清晰记录用户的注册时间,方便商家进行用户管理和数据分析。该表的约束条件能有效保证用户数据的完整性和安全性,为系统的用户管理模块提供了可靠的数据支撑。

表3-2:用户表(users)结构表

|------------|----------|---------------------------|-------------------|--------------------|
| 字段名 | 数据类型 | 约束条件 | 默认值 | 字段说明 |
| id | INTEGER | PRIMARY KEY、AUTOINCREMENT | 无 | 用户唯一标识,自动增长 |
| username | TEXT | UNIQUE、NOT NULL | 无 | 用户名,不可重复、不能为空 |
| password | TEXT | NOT NULL | 无 | 用户密码,不能为空,用于登录验证 |
| email | TEXT | 无 | 无 | 用户邮箱,可选填,用于密码重置 |
| role | TEXT | 无 | user | 用户角色,默认普通用户,可设为管理员 |
| balance | REAL | 无 | 0 | 用户余额,默认0,可用于订单支付 |
| created_at | DATETIME | 无 | CURRENT_TIMESTAMP | 用户注册时间,自动记录当前时间 |

商品表(products)是商城小程序的核心数据表之一,主要用于存储所有商品的相关信息,是商品展示、搜索和交易的基础。该表通过id字段实现商品的唯一标识,方便后续关联订单、购物车等数据表;name和description字段用于展示商品的基本信息,帮助用户了解商品详情;price字段是商品交易的核心数据,直接影响订单总价的计算;stock字段记录商品库存,能有效控制商品的可购买数量,避免出现超卖的情况;category字段对商品进行分类,方便用户快速查找所需商品;image字段存储商品图片路径,提升商品的展示效果;created_at字段记录商品的添加时间,便于商家进行商品管理和更新。

表3-3:商品表(products)结构表

|-------------|----------|---------------------------|-------------------|--------------------|
| 字段名 | 数据类型 | 约束条件 | 默认值 | 字段说明 |
| id | INTEGER | PRIMARY KEY、AUTOINCREMENT | 无 | 商品唯一标识,自动增长 |
| name | TEXT | NOT NULL | 无 | 商品名称,不能为空,用于商品展示 |
| description | TEXT | 无 | 无 | 商品描述,可选填,介绍商品详情 |
| price | REAL | NOT NULL | 无 | 商品价格,不能为空,用于订单结算 |
| stock | INTEGER | 无 | 0 | 商品库存,默认0,控制商品可购买数量 |
| category | TEXT | 无 | 无 | 商品类别,用于商品分类展示 |
| image | TEXT | 无 | 无 | 商品图片路径,用于页面展示商品图片 |
| created_at | DATETIME | 无 | CURRENT_TIMESTAMP | 商品添加时间,自动记录当前时间 |

订单表(orders)主要用于存储用户的订单信息,记录用户购物的完整交易记录,是订单管理模块的核心数据表。该表通过id字段实现订单的唯一标识,方便用户和商家查询订单详情;user_id字段与用户表建立关联,明确订单所属的用户,便于后续统计用户的消费记录;total_price字段记录订单的最终总价,是用户支付的核心依据;status字段标识订单的当前状态,方便商家跟踪订单进度、进行订单管理;payment_method和shipping_address字段分别记录支付方式和收货地址,为订单的支付和配送提供支撑;created_at字段记录订单的创建时间,便于商家进行订单统计和数据分析,同时也能让用户查看自己的订单创建时间。

表3-4:订单表(orders)结构表

|------------------|----------|---------------------------|-------------------|------------------------|
| 字段名 | 数据类型 | 约束条件 | 默认值 | 字段说明 |
| id | INTEGER | PRIMARY KEY、AUTOINCREMENT | 无 | 订单唯一标识,自动增长 |
| user_id | INTEGER | NOT NULL、FOREIGN KEY | 无 | 关联用户表id,标识订单所属用户 |
| total_price | REAL | NOT NULL | 无 | 订单总价,不能为空,用于支付结算 |
| status | TEXT | 无 | pending | 订单状态,默认待支付,可设为已支付、已取消等 |
| payment_method | TEXT | 无 | 无 | 支付方式,可选填,如余额支付、微信支付等 |
| shipping_address | TEXT | 无 | 无 | 收货地址,可选填,用于商品配送 |
| created_at | DATETIME | 无 | CURRENT_TIMESTAMP | 订单创建时间,自动记录当前时间 |

购物车表(cart)主要用于存储用户添加到购物车的商品信息,方便用户临时存放想要购买的商品,是连接商品和订单的重要数据表。该表通过id字段实现购物车记录的唯一标识,避免出现重复记录;user_id字段与用户表建立关联,确保每个用户只能查看和操作自己的购物车;product_id字段与商品表建立关联,明确购物车中商品的具体信息;quantity字段记录商品的数量,用户可以根据自己的需求修改,系统会根据该字段和商品价格计算购物车总价;created_at字段记录购物车记录的添加时间,方便用户了解自己添加商品的时间,同时也便于系统清理长期未操作的购物车记录,优化数据存储。

表3-5:购物车表(cart)结构表

|------------|----------|---------------------------|-------------------|--------------------|
| 字段名 | 数据类型 | 约束条件 | 默认值 | 字段说明 |
| id | INTEGER | PRIMARY KEY、AUTOINCREMENT | 无 | 购物车记录唯一标识,自动增长 |
| user_id | INTEGER | NOT NULL、FOREIGN KEY | 无 | 关联用户表id,标识购物车所属用户 |
| product_id | INTEGER | NOT NULL、FOREIGN KEY | 无 | 关联商品表id,标识购物车中的商品 |
| quantity | INTEGER | 无 | 1 | 商品数量,默认1,可由用户修改 |
| created_at | DATETIME | 无 | CURRENT_TIMESTAMP | 购物车记录添加时间,自动记录当前时间 |

反馈表(feedback)主要用于存储用户对商品的反馈和评价信息,帮助商家了解商品的优缺点,优化商品和服务质量。该表通过id字段实现反馈记录的唯一标识,方便商家管理和查看反馈;user_id字段与用户表建立关联,明确反馈的提交用户,便于商家与用户沟通反馈问题;product_id字段与商品表建立关联,明确反馈对应的商品,方便商家针对具体商品进行改进;content字段是反馈的核心内容,记录用户对商品的具体评价和建议,不能为空;rating字段用于用户对商品进行评分,为其他用户购买商品提供参考;created_at字段记录反馈的提交时间,便于商家及时查看和处理最新反馈,提升用户体验。

表3-6:反馈表(feedback)结构表

|------------|----------|---------------------------|-------------------|----------------------|
| 字段名 | 数据类型 | 约束条件 | 默认值 | 字段说明 |
| id | INTEGER | PRIMARY KEY、AUTOINCREMENT | 无 | 反馈记录唯一标识,自动增长 |
| user_id | INTEGER | NOT NULL、FOREIGN KEY | 无 | 关联用户表id,标识反馈所属用户 |
| product_id | INTEGER | NOT NULL、FOREIGN KEY | 无 | 关联商品表id,标识反馈对应的商品 |
| content | TEXT | NOT NULL | 无 | 反馈内容,不能为空,记录用户对商品的评价 |
| rating | INTEGER | 无 | 无 | 商品评分,可选填,用于评价商品质量 |
| created_at | DATETIME | 无 | CURRENT_TIMESTAMP | 反馈提交时间,自动记录当前时间 |

优惠券表(coupons)主要用于存储系统中的优惠券信息,用于订单支付时的折扣优惠,是提升用户购买意愿、促进交易的重要数据表。该表通过id字段实现优惠券的唯一标识,方便商家管理优惠券;code字段保证优惠券码的唯一性,用户可通过该码兑换优惠券;discount字段记录优惠金额,是优惠券折扣的核心依据;min_purchase字段设置最低消费金额,避免优惠券被滥用;max_uses和used_count字段分别记录优惠券的最大使用次数和已使用次数,便于商家控制优惠券的使用范围;expires_at字段设置优惠券的过期时间,确保优惠券的时效性;created_at字段记录优惠券的创建时间,便于商家进行优惠券的统计和管理。

表3-7:优惠券表(coupons)结构表

|--------------|----------|---------------------------|-------------------|------------------------|
| 字段名 | 数据类型 | 约束条件 | 默认值 | 字段说明 |
| id | INTEGER | PRIMARY KEY、AUTOINCREMENT | 无 | 优惠券唯一标识,自动增长 |
| code | TEXT | UNIQUE、NOT NULL | 无 | 优惠券码,不可重复、不能为空,用于兑换优惠券 |
| discount | REAL | NOT NULL | 无 | 优惠金额,不能为空,用于订单折扣 |
| min_purchase | REAL | 无 | 0 | 最低消费金额,默认0,满足条件可使用优惠券 |
| max_uses | INTEGER | 无 | -1 | 最大使用次数,默认-1(无限制) |
| used_count | INTEGER | 无 | 0 | 已使用次数,默认0,记录优惠券使用情况 |
| expires_at | DATETIME | 无 | 无 | 优惠券过期时间,可选填,过期后无法使用 |
| created_at | DATETIME | 无 | CURRENT_TIMESTAMP | 优惠券创建时间,自动记录当前时间 |

4 漏洞挖掘与验证分析

4.1 漏洞挖掘思路与范围

漏洞挖掘遵循"全面覆盖、重点突破"的思路,结合系统总体架构和核心数据表结构,聚焦接口层、数据层和业务逻辑层三大攻击面,重点挖掘与数据库交互频繁、用户操作集中的模块漏洞。挖掘范围涵盖用户登录、商品搜索、订单结算、购物车操作等核心功能,结合前文设计的users、products、orders等数据表,重点关注字段校验、权限控制、SQL查询等关键环节,采用自动化扫描与手动渗透相结合的方式,先通过Burp Suite、OWASP ZAP等工具初步扫描漏洞,再结合手动构造请求、代码审计的方式验证漏洞真实性,确保不遗漏高危漏洞,同时避免误报、漏报情况的发生。

4.2 核心漏洞挖掘与验证

4.2.1 SQL注入漏洞挖掘与验证

SQL注入漏洞是系统数据层最突出的高危漏洞,结合前文products表、users表的结构设计,发现商品搜索接口、用户登录接口因未使用参数化查询,采用字符串拼接方式构造SQL语句,导致存在SQL注入漏洞,下面以商品搜索接口为例,结合代码、公式展开验证分析。

商品搜索接口的核心功能是根据用户输入的关键词,查询products表中的商品信息,对应后端代码片段如下(简化版):

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| javascript // 商品搜索接口后端代码 app.get('/api/searchProduct', (req, res) => { const keyword = req.query.keyword; // 获取用户输入的搜索关键词 // 采用字符串拼接构造SQL查询语句,未做参数化处理 const sql = "SELECT * FROM products WHERE name LIKE '%" + keyword + "%'"; db.all(sql, (err, rows) => { if (err) { res.status(500).json({ message: '查询失败' }); } else { res.json({ data: rows }); } }); }); |

从上述代码可以看出,接口直接获取用户输入的keyword参数,未做任何过滤和校验,直接拼接至SQL语句中,当用户输入恶意注入语句时,会篡改SQL查询逻辑,获取数据库敏感数据。为验证该漏洞,构造恶意搜索关键词:test' OR 1=1 --,代入SQL语句后,拼接后的SQL语句如下:

|------------------------------------------------------------------|
| sql SELECT * FROM products WHERE name LIKE '%test' OR 1=1 --%'; |

其中--为SQL注释符,会注释掉后续语句,此时SQL语句等价于SELECT * FROM products WHERE 1=1,会查询出products表中的所有商品信息,甚至可进一步构造注入语句,获取users表中的用户密码等敏感数据。

漏洞危害程度可通过注入成功率公式量化,注入成功率LaTeX公式如下:

其中,

表示成功注入的请求次数,

表示总注入请求次数,本次验证共发起10次注入请求,均成功获取敏感数据,因此注入成功率L=100%,属于高危漏洞,会导致数据库核心数据泄露,影响用户隐私和系统安全。

4.2.2 越权访问漏洞挖掘与验证

越权访问漏洞主要存在于订单查看接口,结合前文orders表的结构设计,订单查看接口未对用户权限进行严格校验,仅通过请求参数中的user_id字段判断订单归属,攻击者可通过篡改user_id参数,查看其他用户的订单信息,下面结合代码和验证过程展开分析。

订单查看接口的后端代码片段如下(简化版):

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| javascript // 订单查看接口后端代码 app.get('/api/getOrder', (req, res) => { const userId = req.query.user_id; // 获取请求参数中的用户ID const orderId = req.query.order_id; // 获取请求参数中的订单ID // 未校验userId与当前登录用户ID是否一致,直接查询订单 const sql = "SELECT * FROM orders WHERE id = ? AND user_id = ?"; db.get(sql, orderId, userId, (err, row) => { if (err) { res.status(500).json({ message: '查询失败' }); } else { res.json({ data: row }); } }); }); |

上述代码中,接口仅校验订单ID与user_id的关联关系,未校验请求中的user_id是否为当前登录用户的ID,若攻击者已登录系统(获取合法JWT令牌),只需篡改请求参数中的user_id,即可查询其他用户的订单信息。例如,攻击者登录账号(user_id=1),构造请求URL:/api/getOrder?order_id=1&user_id=2,即可查询user_id=2的用户的订单信息,包括订单总价、收货地址等敏感数据。

采用越权成功率公式量化漏洞危害,越权成功率LaTeX公式如下:

其中,

表示成功越权的请求次数,

4.2.3 业务逻辑漏洞挖掘与验证

业务逻辑漏洞主要存在于订单结算接口,结合前文orders表和coupons表的结构设计,订单结算时未在后端重新计算订单总价,直接使用前端传递的total_price参数,同时优惠券使用未校验使用次数,导致存在"零元购"和优惠券滥用漏洞,下面结合代码、公式展开验证。

订单结算接口的后端代码片段如下:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| javascript // 订单结算接口后端代码 app.post('/api/settleOrder', (req, res) => { const { userId, totalPrice, couponCode, productList } = req.body; // 未在后端重新计算订单总价,直接使用前端传递的totalPrice // 优惠券校验未判断使用次数 let discount = 0; if (couponCode) { db.get("SELECT * FROM coupons WHERE code = ?", couponCode, (err, coupon) => { if (coupon) { discount = coupon.discount; // 直接获取优惠金额,未校验使用次数 } const finalPrice = totalPrice - discount; // 插入订单数据 const sql = "INSERT INTO orders (user_id, total_price, status) VALUES (?, ?, ?)"; db.run(sql, userId, finalPrice, 'pending', (err) => { if (err) { res.status(500).json({ message: '订单创建失败' }); } else { res.json({ message: '订单创建成功', finalPrice }); } }); }); } }); |

漏洞验证分为两部分:一是"零元购"漏洞,攻击者通过篡改前端传递的totalPrice参数,将其设为0或负数,结合优惠券折扣,即可实现零元购买商品;二是优惠券滥用漏洞,攻击者使用max_uses=1的优惠券,多次提交订单,因后端未校验used_count字段,可重复使用该优惠券。

以"零元购"漏洞为例,构造前端请求参数:{"userId":1, "totalPrice":0, "couponCode":"TEST123", "productList":1},提交后后端计算最终价格finalPrice=0-10= -10(假设优惠券折扣10元),订单创建成功,攻击者可零元获取商品。

采用漏洞利用成功率公式量化危害,利用成功率LaTeX公式如下:

其中,

表示成功利用漏洞的次数,

4.3 漏洞汇总与危害分析

结合上述挖掘与验证过程,本次共挖掘出3类核心高危漏洞,均与前文数据库结构设计、安全风险分析相呼应,漏洞汇总及危害分析如下:一是SQL注入漏洞,主要存在于商品搜索、用户登录接口,因SQL语句拼接未做参数化处理导致,会泄露users、products等数据表的敏感数据,危害用户隐私和系统数据安全;二是越权访问漏洞,存在于订单查看接口,因权限校验不严格导致,会泄露其他用户的订单信息,破坏系统权限管理逻辑;三是业务逻辑漏洞,存在于订单结算接口,因后端未校验订单总价和优惠券使用次数导致,会造成商家经济损失,扰乱交易秩序。

各类漏洞的危害等级可通过综合危害指数公式量化,综合危害指数LaTeX公式如下:

其中,L为SQL注入成功率,Y为越权成功率,L_y为业务逻辑漏洞利用成功率,代入本次验证数据(L=100%,Y=80%,L_y=100%),计算得出综合危害指数Z=0.4×1 + 0.3×0.8 + 0.3×1 = 0.94,属于极高危害等级,需优先进行修复,后续章节将针对这些漏洞提出具体的修复方案。

5 安全防护方案设计与系统实现

5.1 防护方案总体设计

结合前文对Easy-Shop商城小程序的系统架构、功能模块及漏洞挖掘结果,本次防护方案围绕前后端分离架构的三层安全体系展开,针对认证安全、注入攻击、访问控制、业务逻辑四大类高危漏洞,设计分层防护、纵深防御的整体方案,在不影响原有业务功能的前提下,实现漏洞的全面修复与系统安全加固,方案覆盖接口校验、权限控制、数据加密、日志监控等核心环节,确保防护措施可落地、可验证,适配系统现有技术栈与业务流程。

系统防护的核心思路是"前端拦截、后端校验、数据加密、全程监控",前端层新增输入过滤与参数校验逻辑,拦截恶意请求的同时,避免前端参数被篡改;后端层强化接口权限校验与业务逻辑校验,补全参数化查询、Token验证等关键环节,从根源上阻断漏洞利用;数据层完善加密存储与访问控制,保障核心数据的安全性;同时新增全链路日志监控与异常检测机制,实现安全事件的实时告警与溯源,形成完整的安全防护闭环。

图 5-1 EasyShop 安全实验室首页图

5.2 核心漏洞防护方案设计与实现

5.2.1 认证安全漏洞防护(密码重置绕过)

针对密码重置接口存在的Token验证缺失漏洞,防护方案从三个维度实现加固:一是新增重置Token生成与校验机制,用户发起密码重置请求时,后端生成带有时效性(15分钟有效期)的加密Token,绑定用户ID与请求时间,发送至用户注册邮箱;二是接口校验逻辑重构,密码重置接口必须携带有效Token,后端校验Token的有效性、时效性与用户绑定关系,未携带或校验不通过的请求直接拦截;三是新增操作日志记录,记录每一次密码重置请求的IP、时间、Token信息,便于后续安全溯源。

防护实现的核心代码逻辑为:在重置接口中新增Token校验中间件,验证Token的签名与有效期,仅校验通过后才执行密码修改操作,同时更新用户表的密码重置记录,避免重复利用。通过Postman测试验证,未携带有效Token的重置请求直接返回401未授权,仅携带合法Token的请求可成功重置密码,彻底修复该漏洞。

图 5-3 密码重置绕过漏洞说明页面图

图 5-4 密码重置绕过漏洞 Postman 测试效果图

5.2.2 业务逻辑漏洞防护(优惠券滥用)

针对购物车结算环节的优惠券滥用漏洞,防护方案围绕优惠券全生命周期设计管控逻辑:一是在优惠券表中新增使用次数校验,后端结算时校验优惠券的max_uses与used_count字段,仅当used_count < max_uses时允许使用,使用后自动累加used_count;二是新增优惠券使用绑定机制,单张优惠券绑定单个用户,避免跨用户重复使用;三是新增订单结算总价后端重算逻辑,不再依赖前端传递的总价参数,后端根据购物车商品信息重新计算订单总价,结合优惠券折扣计算最终价格,从根源上杜绝价格篡改与"零元购"漏洞。

防护实现后,同一优惠券仅能使用指定次数,重复使用请求直接返回"优惠券已达使用上限",同时订单总价由后端重新计算,前端篡改参数无效,彻底修复业务逻辑漏洞,保障商家经济利益。

图 5-2 EasyShop 商品列表页面图

图 5-5 优惠券滥用漏洞说明页面图

5.2.3 CSRF漏洞防护

针对个人信息修改接口存在的CSRF漏洞,防护方案采用Token校验与Referer校验双重防护:一是新增CSRF Token机制,用户登录时后端生成随机CSRF Token,存储在用户会话中,前端所有敏感操作(如修改邮箱、修改密码)的请求必须携带该Token,后端校验Token与会话的一致性,不一致则拦截请求;二是新增Referer校验,校验请求的来源域名,仅允许来自本系统域名的请求访问敏感接口;三是敏感操作新增二次确认,避免用户误操作引发的安全风险。

防护实现后,跨站请求因无法携带合法CSRF Token,直接被后端拦截,无法修改用户信息,彻底修复CSRF漏洞,同时不影响用户正常操作体验。

图 5-6 CSRF 攻击演示成功效果图

5.3 防护方案验证与效果分析

本次防护方案完成后,针对所有已挖掘漏洞开展回归测试,验证防护效果:一是SQL注入漏洞,通过参数化查询改造,恶意注入请求被后端拦截,无法执行非法SQL操作;二是越权访问漏洞,新增权限校验中间件,篡改用户ID的请求被拦截,无法访问其他用户订单信息;三是业务逻辑漏洞,优惠券使用次数校验与总价重算逻辑生效,无法实现优惠券滥用与零元购;四是CSRF与密码重置漏洞,Token校验机制生效,跨站请求与非法重置请求均被拦截。

从防护效果来看,所有高危漏洞均被彻底修复,系统综合安全防护能力得到显著提升,同时未影响原有业务功能的正常运行,用户操作体验无明显变化;防护方案的可扩展性较强,可针对后续新增漏洞快速迭代防护策略,适配系统后续的功能更新与业务拓展,为Easy-Shop商城小程序的安全稳定运行提供了可靠保障。

6 总结与展望

6.1 研究工作总结

本研究围绕Easy-Shop商城小程序的安全问题展开,全程遵循"系统分析---漏洞挖掘---防护设计---效果验证"的核心思路,完成了从系统架构分析到安全防护落地的全流程研究工作,有效解决了小程序存在的各类高危安全漏洞,为商城类小程序的安全防护提供了可参考的实践方案。研究首先对Easy-Shop商城小程序的总体架构、核心功能模块及数据库结构做了详细分析,明确了系统的安全薄弱环节,梳理出接口层、数据层、业务逻辑层三大攻击面;随后采用自动化扫描与手动渗透相结合的方式,挖掘出SQL注入、越权访问、密码重置绕过、优惠券滥用、CSRF等高危漏洞,结合代码与公式完成了漏洞验证,明确了漏洞成因与危害程度;最后针对各类漏洞设计了分层防护方案,完成了防护功能的实现与回归测试,确保所有高危漏洞均被彻底修复,系统安全性能得到显著提升。

本次研究严格贴合小程序的技术栈与业务流程,所有防护措施均在不影响原有业务功能的前提下落地,既保证了系统的安全性,又兼顾了用户操作体验,同时完成了漏洞挖掘、防护设计、效果验证的完整闭环,达到了预期的研究目标,也为同类商城小程序的安全防护工作提供了实践参考与技术支撑。

相关推荐
万联WANFLOW1 小时前
TikTok Shop上线“Sell Across EU”,欧洲社交电商迎来生态重构
网络·业界资讯
liulilittle2 小时前
为什么采用全局管理缓存及状态:麻将客户端状态管理
服务器·网络·游戏·客户端·异步·mahjong·麻将
酣大智3 小时前
OSPF引入的直连路由在 ospf 路由表中看不到
网络·ospf
2601_966377133 小时前
等保2.0最新标准新增安全数据处理要求后怎么办?等保一体机数据安全模块来助力
运维·网络·安全·等保一体机
BullSmall3 小时前
window系统上报Cannot assign requested address
网络·功能测试
杨云龙UP3 小时前
MySQL Host is blocked because of many connection errors 导致 JDBC 连接失败排查与解决
linux·运维·网络·数据库·sql·mysql·登录失败
执念WRD3 小时前
Fastjson 1.2.83 RCE 漏洞利用
网络·安全·网络安全
xixiaoyunya3 小时前
局域网多电脑文件互备:从传统痛点到自动化方案的技术路径
网络·安全
yume_sibai3 小时前
11-Rust 不安全编程(unsafe 关键字 + 裸指针 + FFI + 内联汇编 + 内存安全保证)
汇编·安全·rust