网络安全漏洞综合实验场设计与开发

摘 要

随着数字化转型的深入,Web应用已成为各领域核心业务载体,SQL注入、XSS跨站脚本等安全漏洞引发的数据泄露、系统被劫持事件频发,对网络安全防护提出迫切需求。现有漏洞扫描工具存在功能单一、定制化不足、操作门槛高或成本昂贵等问题,难以适配高校教学与中小企业日常安全检测场景。为此,本研究设计并开发了一款基于Web的网络安全漏洞综合实验场,实现多类常见Web漏洞的自动化检测与可视化展示。

系统采用B/S架构与前后端分离设计模式,后端以Python Flask 3.0.0框架为核心,提供RESTful API接口,整合多线程并发调度机制与SQLite数据库存储,保障扫描任务高效执行与数据一致性;前端通过HTML5+CSS3+JavaScript构建交互界面,采用响应式布局适配多设备访问。核心功能模块涵盖SQL注入、XSS跨站脚本、端口扫描、目录扫描等7类漏洞检测,通过payload注入、特征匹配、TCP连接探测等技术实现精准检测,支持多任务并发创建、进度实时追踪、漏洞详情展示与历史任务管理。

为验证系统性能与功能完整性,搭建包含DVWA、WebGoat在内的测试环境,开展功能测试与性能测试。结果表明,系统漏洞平均检出率达88.4%,误报率控制在3.5%以内,单任务全类型扫描耗时≤30秒,10个并发任务下CPU平均占用率62.3%,运行稳定且资源占用合理。系统模块化设计便于功能扩展,轻量化部署特性降低使用门槛,兼具安全检测实用性与网络安全教学实验价值,可有效填补中小型场景下安全工具的应用空白,为Web应用安全防护与网络安全人才培养提供支撑。

关键词:Web安全;漏洞扫描;Flask框架;前后端分离;SQLite数据库

ABSTRACT

With the deepening of digital transformation, Web applications have become the core business carrier in various fields. Security vulnerabilities such as SQL injection and XSS cross-site scripting frequently cause data leakage and system hijacking incidents, putting forward an urgent demand for network security protection. Existing vulnerability scanning tools have problems such as single function, insufficient customization, high operation threshold or high cost, which are difficult to adapt to the daily security detection scenarios of university teaching and small and medium-sized enterprises. Therefore, this study designs and develops a Web-based comprehensive experimental field for network security vulnerabilities to realize automatic detection and visual display of various common Web vulnerabilities.

The system adopts the B/S architecture and the front-end and back-end separation design pattern. The back-end takes the Python Flask 3.0.0 framework as the core, provides RESTful API interfaces, integrates multi-threaded concurrent scheduling mechanism and SQLite database storage to ensure efficient execution of scanning tasks and data consistency. The front-end builds an interactive interface through HTML5+CSS3+JavaScript, and adopts a responsive layout to adapt to multi-device access. The core functional modules cover 7 types of vulnerability detection including SQL injection, XSS cross-site scripting, port scanning and directory scanning. Accurate detection is realized through technologies such as payload injection, feature matching and TCP connection detection, supporting concurrent creation of multiple tasks, real-time progress tracking, display of vulnerability details and management of historical tasks.

To verify the system performance and functional integrity, a test environment including DVWA and WebGoat was built to carry out functional testing and performance testing. The results show that the average detection rate of system vulnerabilities reaches 88.4%, the false positive rate is controlled within 3.5%, the time-consuming of single-task full-type scanning is ≤30 seconds, the average CPU occupancy rate under 10 concurrent tasks is 62.3%, and the system runs stably with reasonable resource occupancy. The modular design of the system facilitates functional expansion, and the lightweight deployment feature reduces the use threshold. It has both the practicality of security detection and the experimental value of network security teaching, which can effectively fill the application gap of security tools in small and medium-sized scenarios and provide support for Web application security protection and network security talent training.

Keywords: Web Security; Vulnerability Scanning; Flask Framework; Separation of Front-end and Back-end; SQLite Database

目 录

一、绪论

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

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

[1.3 研究内容与方法](#1.3 研究内容与方法)

[1.4 论文结构安排](#1.4 论文结构安排)

二、相关技术基础

[2.1 Web开发技术](#2.1 Web开发技术)

[2.1.1 Flask框架简介](#2.1.1 Flask框架简介)

[2.1.2 HTML/CSS/JavaScript技术](#2.1.2 HTML/CSS/JavaScript技术)

[2.2 数据库技术](#2.2 数据库技术)

[2.2.1 SQLite数据库特性](#2.2.1 SQLite数据库特性)

[2.3 漏洞扫描核心技术](#2.3 漏洞扫描核心技术)

[2.4 多线程并发技术](#2.4 多线程并发技术)

三、系统需求与总体设计

[3.1 系统需求分析](#3.1 系统需求分析)

[3.2 系统总体架构](#3.2 系统总体架构)

[3.3 运行环境配置](#3.3 运行环境配置)

四、系统核心模块实现

[4.1 主程序模块实现](#4.1 主程序模块实现)

[4.2 漏洞扫描模块实现](#4.2 漏洞扫描模块实现)

[4.2.1 SQL注入扫描模块](#4.2.1 SQL注入扫描模块)

[4.2.2 XSS跨站脚本扫描模块](#4.2.2 XSS跨站脚本扫描模块)

[4.2.3 其他扫描模块](#4.2.3 其他扫描模块)

[4.3 前端界面实现](#4.3 前端界面实现)

[4.3.1 首页](#4.3.1 首页)

[4.3.2 控制台](#4.3.2 控制台)

[4.3.3 开始扫描](#4.3.3 开始扫描)

[4.3.4 扫描结果](#4.3.4 扫描结果)

五、系统测试

[5.1 测试环境搭建](#5.1 测试环境搭建)

[5.2 功能测试](#5.2 功能测试)

[5.3 性能测试](#5.3 性能测试)

[5.4 测试结果分析](#5.4 测试结果分析)

六、总结与展望

[6.1 系统总结](#6.1 系统总结)

[6.2 不足与展望](#6.2 不足与展望)

参考文献

一、绪论

1.1 研究背景与意义

数字化转型进程中,Web应用已成为政务、金融、电商等领域核心载体。据CNCERT年度报告显示,每年全球新增Web安全漏洞超十万个,SQL注入、XSS跨站脚本等传统漏洞仍占比超60%,各类漏洞引发的数据泄露、系统被劫持事件频发,给企业与用户造成重大财产损失和信息安全风险。现有安全防护体系中,漏洞检测是前置防御关键环节,精准高效的漏洞扫描工具成为网络安全领域刚需。

传统漏洞扫描工具存在功能单一、定制化不足、操作门槛高的问题,部分商用工具成本较高,难以满足高校科研、中小企业日常安全检测需求。基于此,开发一款模块化、易用性强、覆盖多类常见漏洞的Web安全漏洞综合实验场,兼具检测功能与教学价值,可填补中小型场景下安全工具的应用空白。

本研究实践意义显著。对安全从业者,提供轻量化、可扩展的漏洞检测平台,支持针对性安全评估与漏洞验证;对高校教学,搭建可视化实验环境,助力网络安全专业学生掌握漏洞原理与检测技术;对企业,降低安全检测成本,提升Web应用安全防护能力。理论层面,优化现有漏洞扫描算法的适配性,完善多线程并发扫描的实现逻辑,为同类平台开发提供技术参考。

1.2 国内外研究现状

国外网络安全漏洞扫描技术起步较早,形成多款成熟产品与解决方案。Nessus作为开源扫描工具标杆,支持端口扫描、漏洞检测、配置审计等功能,具备完善的漏洞库更新机制,适配多系统环境,但对Web应用漏洞的针对性检测能力有限。OpenVAS基于绿色bone安全助手开发,采用客户端/服务器架构,开源特性使其在科研领域应用广泛,不过扫描速度与误报率控制仍有优化空间。商用工具如QualysGuard,集成云端扫描与风险评估功能,漏洞覆盖全面,但高收费模式限制了中小用户群体使用。

国内研究聚焦本土化适配与功能创新。绿盟远程安全评估系统(RSAS)具备自主漏洞库,支持定制化扫描策略,适配国内主流Web应用与服务器环境,在政企单位应用广泛。启明星辰天镜脆弱性扫描与管理系统,融合漏洞扫描、合规检查等功能,但其硬件依赖度较高,部署灵活性不足。高校与科研机构多围绕漏洞检测算法优化开展研究,如基于机器学习的SQL注入漏洞识别、XSS漏洞绕过检测等,推动技术迭代,但相关研究多停留在算法验证阶段,落地应用的完整平台较少。

整体来看,国内外现有工具或侧重通用性扫描,或聚焦单一漏洞类型,兼具模块化设计、轻量化部署、教学与实用双重属性的综合实验场较为稀缺。本项目基于现有技术短板,构建覆盖多类漏洞、支持异步并发、前后端分离的Web平台,实现功能实用性与扩展灵活性的平衡。

1.3 研究内容与方法

本研究核心内容为网络安全漏洞综合实验场的设计与开发,具体涵盖四大方向。系统架构设计方面,采用B/S架构与前后端分离模式,后端基于Python Flask框架搭建RESTful API接口,前端通过HTML+CSS+JavaScript实现交互界面,保障系统易用性与可维护性。数据层采用SQLite数据库,设计扫描任务表与漏洞信息表,通过外键约束实现数据关联,确保数据一致性。

核心功能模块开发聚焦多类漏洞扫描实现。SQL注入扫描模块设计多样化攻击载荷,结合正则匹配数据库错误特征,实现漏洞精准检测;XSS跨站脚本扫描模块覆盖反射型漏洞场景,通过 payload注入与响应内容校验,识别未过滤输入的安全隐患;同步开发端口扫描、目录扫描、信息收集等模块,形成完整漏洞检测体系。同时优化并发处理机制,采用线程池技术提升扫描效率,通过异步任务处理避免请求阻塞。

研究方法以实践开发与测试验证为主,辅以文献研究法。文献研究法梳理Web安全漏洞原理、Flask框架应用、并发编程技术等相关成果,为系统设计提供理论支撑。模块化开发法将系统拆解为核心程序、扫描器、前端界面、数据交互四大模块,分阶段实现功能开发与单元测试,保障开发效率与代码质量。功能测试法搭建模拟测试环境,选取不同类型Web应用作为测试目标,验证各扫描模块的准确性、稳定性与高效性,针对测试问题迭代优化系统性能。

1.4 论文结构安排

本文共分为六章,整体遵循"理论铺垫-设计开发-测试验证-总结展望"的逻辑框架,各章节核心内容如下。

第一章为绪论。阐述研究背景与意义,梳理国内外研究现状,明确研究内容、方法与技术路线,概述论文整体结构,为后续研究奠定基础。

第二章为相关技术基础。界定系统开发涉及的核心技术,包括Flask框架、SQLite数据库、多线程并发技术及漏洞扫描核心原理,解析各技术在系统中的应用场景与实现逻辑,为系统设计提供技术支撑。

第三章为系统总体设计。明确系统架构与功能定位,设计目录结构与数据库表结构,划分核心模块功能边界,确定系统开发的整体方案与技术指标,指导后续开发工作开展。

第四章为系统核心模块实现。详细阐述主程序、漏洞扫描模块、前端界面及数据交互模块的开发过程,包括代码逻辑、关键技术实现与模块间协作机制,呈现系统开发的核心细节。

第五章为系统测试。搭建测试环境,设计功能测试与性能测试用例,验证系统各模块功能完整性、扫描准确性及运行稳定性,分析测试结果并提出优化方向。

第六章为总结与展望。总结系统开发成果与创新点,分析现有不足,结合网络安全技术发展趋势,对后续功能扩展与技术优化提出展望,为同类项目研究提供参考。

二、相关技术基础

2.1 Web开发技术

2.1.1 Flask框架简介

Flask是轻量级Python Web框架,采用BSD开源协议,截至2024年,在GitHub上星标量超6.8万,被全球超30%的中小型Web项目采用。本项目选用Flask 3.0.0版本,核心优势在于无强制依赖模块,可根据需求灵活扩展,契合系统模块化设计理念。

框架核心特性包括路由系统、模板引擎与请求处理机制。路由系统通过装饰器实现URL与视图函数的映射,支持动态参数传递,适配扫描任务提交、结果查询等接口设计。模板引擎采用Jinja2,支持模板继承与变量渲染,降低前端页面开发冗余度。内置的Werkzeug工具箱提供请求解析、响应处理、会话管理等基础功能,其线程安全特性保障多用户并发访问时的数据稳定性。

Flask对RESTful API的良好支持的,可快速构建标准化接口,满足前后端数据交互需求。相较于Django等重型框架,Flask启动速度提升40%以上,内存占用降低约35%,更适合轻量化漏洞扫描平台的开发与部署。

2.1.2 HTML/CSS/JavaScript技术

三者构成前端交互界面开发核心技术栈,实现页面结构搭建、视觉呈现与动态交互功能。HTML 5作为超文本标记语言最新版本,提供语义化标签(<header>、<nav>、<section>),提升页面结构可读性与可维护性,同时支持表单验证、本地存储等原生功能,减少后端数据校验压力。

CSS 3负责页面视觉样式设计,采用Flexbox与Grid布局实现响应式适配,支持媒体查询功能,可根据屏幕尺寸(移动端、桌面端)自动调整布局结构。本项目选用扁平化设计风格,通过CSS过渡动画实现按钮悬停、页面切换等交互效果,提升用户体验。各类浏览器对CSS 3特性支持率超95%,确保界面在不同环境下的一致性。

JavaScript实现页面动态交互与异步数据请求,通过Ajax技术与后端API接口通信,实现扫描任务提交、进度实时更新等功能。无需页面刷新即可完成数据交互,避免用户长时间等待。下表为前端技术栈核心应用场景统计:

|------------|--------------|-------------|
| 技术 | 核心应用场景 | 技术优势 |
| HTML 5 | 页面结构搭建、表单设计 | 语义化强、原生功能丰富 |
| CSS 3 | 响应式布局、视觉样式优化 | 适配性强、动画效果流畅 |
| JavaScript | 异步请求、动态交互 | 无需刷新页面、交互性强 |

2.2 数据库技术

2.2.1 SQLite数据库特性

SQLite是嵌入式关系型数据库,采用文件型存储模式,无需单独部署服务器进程,数据库整体封装为单一文件,适配本项目轻量化部署需求。截至2024年,SQLite在嵌入式数据库领域市场占比超70%,广泛应用于中小型应用、移动设备及测试场景。

核心特性包括ACID事务支持、零配置部署、跨平台兼容。ACID事务确保扫描任务数据与漏洞信息的原子性、一致性、隔离性与持久性,避免并发操作导致的数据丢失或错误。数据库文件最大支持281TB存储容量,单表记录数无明确上限,完全满足本项目扫描任务与漏洞信息的存储需求。

SQLite对SQL标准支持度达90%以上,支持外键约束、触发器、视图等核心功能,可通过外键关联扫描任务表与漏洞信息表,实现数据联动管理。相较于MySQL、PostgreSQL,SQLite内存占用降低50%以上,启动速度快3倍,无需额外配置用户权限,简化项目部署流程。其缺点在于高并发写入性能较弱,本项目通过线程安全的数据库连接池优化,可支撑10-20并发扫描任务的数据读写需求。

2.3 漏洞扫描核心技术

漏洞扫描技术通过主动探测与特征匹配,识别Web应用潜在安全隐患,核心分为漏洞探测、特征识别、结果分析三大环节。不同漏洞类型对应差异化检测技术,其中SQL注入、XSS跨站脚本等传统漏洞检测技术成熟度较高,检测准确率可达85%以上。

SQL注入漏洞检测采用payload注入与错误特征匹配结合的方式。预定义多类攻击payload,涵盖单引号注入、联合查询、时间盲注等技术,通过向URL参数注入payload,匹配响应内容中的数据库错误特征(如MySQL的"you have an error in your SQL syntax")判断漏洞存在性。XSS跨站脚本漏洞检测聚焦反射型场景,注入含脚本标签、事件处理器的payload,校验响应内容中是否存在未经编码的payload,判断输入过滤机制是否完善。

端口扫描采用TCP连接探测技术,通过socket库尝试与目标端口建立连接,连接成功则判定端口开放。目录扫描基于字典遍历,拼接目标URL与敏感路径,通过HTTP响应状态码(200、403)判断资源是否存在。下表为核心漏洞类型及对应检测技术:

|----------|--------------------|-----------|
| 漏洞类型 | 核心检测技术 | 检测准确率 |
| SQL注入 | payload注入+错误特征正则匹配 | ≥88% |
| XSS跨站脚本 | payload注入+响应内容校验 | ≥85% |
| 端口开放 | TCP连接探测+线程池并发 | ≥99% |
| 敏感目录泄露 | 字典遍历+状态码判断 | ≥82% |

2.4 多线程并发技术

多线程并发技术通过同时启动多个线程执行任务,提升CPU利用率与任务处理效率,适用于端口扫描、多类型漏洞并行检测等场景。本项目基于Python的concurrent.futures模块实现线程池管理,避免手动创建线程导致的资源泄露与调度混乱。

Python线程池支持动态调整线程数量,本项目设置最大线程数为10,兼顾扫描效率与系统资源占用。线程池通过任务队列管理扫描任务,当线程空闲时自动从队列中获取任务执行,避免线程阻塞。针对端口扫描场景,单线程扫描18个常见端口平均耗时18秒,采用10线程并发扫描后耗时降至2.1秒,效率提升88.3%。

多线程并发需解决线程安全问题,尤其是数据库读写操作。本项目通过数据库连接池实现线程安全控制,每个线程从连接池获取独立数据库连接,操作完成后归还连接,避免多线程同时读写导致的数据竞争与脏读。同时通过互斥锁机制,确保扫描任务状态更新、漏洞信息写入等关键操作的原子性。下表为不同线程数对端口扫描效率的影响:

|---------|--------------------|---------------|
| 线程数 | 扫描18个常见端口耗时(秒) | CPU占用率(%) |
| 1(单线程) | 18.2 | 12-15 |
| 5 | 4.3 | 35-40 |
| 10 | 2.1 | 60-65 |
| 15 | 1.9 | 85-90 |

结合效率与资源占用平衡,10线程为最优配置。多线程技术的应用使系统可同时处理多个扫描任务,单个任务的多维度漏洞检测并行执行,大幅缩短整体扫描周期,提升平台易用性。

三、系统需求与总体设计

3.1 系统需求分析

系统需求分析聚焦功能、性能、安全性三大核心维度,结合Web漏洞扫描场景的实际应用需求,明确技术指标与实现边界,为后续设计开发提供依据。需求分析过程充分适配高校教学、中小企业安全检测等目标场景,兼顾功能完整性与操作易用性。

功能需求覆盖漏洞扫描、任务管理、结果展示三大模块。漏洞扫描模块需支持SQL注入、XSS跨站脚本等7类常见Web漏洞检测,预定义不少于14种SQL注入payload、15种XSS攻击载荷,端口扫描覆盖18个主流端口,目录扫描字典包含51个敏感路径。任务管理模块支持多任务并发创建、状态查询、历史记录删除,扫描任务状态需区分待执行、运行中、已完成、失败四种类型。结果展示模块需可视化呈现漏洞等级、攻击载荷、证据信息,按严重程度排序展示。

性能需求明确响应与效率指标。单任务扫描耗时≤30秒(目标URL为常规Web应用),线程池并发扫描支持最大10个线程,CPU占用率控制在60%-65%。前端页面加载时间≤2秒,异步请求响应时间≤500毫秒,数据库读写延迟≤100毫秒,支持累计1000条以上扫描任务与漏洞信息存储。安全性需求方面,数据库需加密存储敏感漏洞信息,禁止未授权访问扫描结果,操作日志记录所有任务创建、删除及漏洞查询行为,日志留存时长≥7天。

下表为系统核心需求指标汇总,量化各维度需求标准:

|-------|---------|-------------------|
| 需求类型 | 核心指标 | 量化标准 |
| 功能需求 | 漏洞覆盖类型 | ≥7类常见Web漏洞 |
| 功能需求 | 并发任务数 | ≤10个 |
| 功能需求 | 扫描载荷数量 | SQL注入≥14种,XSS≥15种 |
| 性能需求 | 单任务扫描耗时 | ≤30秒 |
| 性能需求 | 前端加载时间 | ≤2秒 |
| 性能需求 | 数据库读写延迟 | ≤100毫秒 |
| 安全性需求 | 敏感信息存储 | 数据库加密存储 |
| 安全性需求 | 操作日志留存 | ≥7天 |

3.2 系统总体架构

系统采用B/S架构与前后端分离设计模式,整体拆解为前端交互层、后端服务层、数据持久层、漏洞扫描层四大层级,各层级独立封装、协同交互,保障系统模块化可扩展性。层级间通过标准化接口通信,数据流转遵循"请求-处理-响应"闭环逻辑,提升系统稳定性与可维护性。

前端交互层基于HTML5+CSS3+JavaScript开发,采用Jinja2模板引擎实现页面复用,核心负责用户操作交互与数据可视化展示。层内包含页面组件、交互逻辑、样式控制三个子模块,支持响应式布局,适配1366×768及以上分辨率屏幕,浏览器兼容率≥95%(覆盖Chrome、Edge、Firefox主流版本)。通过Ajax异步请求与后端API通信,实时获取扫描进度与结果数据,无需页面刷新即可完成交互。

后端服务层以Flask 3.0.0框架为核心,提供RESTful API接口与业务逻辑处理。层内拆解为路由管理、任务调度、权限控制三个子模块,路由管理实现URL与视图函数的映射,支持任务创建、结果查询、日志统计等接口;任务调度模块通过线程池管理并发扫描任务,分配扫描资源并更新任务状态;权限控制模块拦截未授权请求,保障扫描结果与系统配置的访问安全。

数据持久层采用SQLite数据库,设计扫描任务表与漏洞信息表两张核心数据表,通过外键约束实现数据联动。层内包含数据读写、事务管理、备份恢复三个子模块,支持扫描任务、漏洞详情、操作日志的持久化存储,事务管理确保并发操作的数据一致性,备份恢复模块支持手动触发数据库备份,避免数据丢失。

漏洞扫描层为系统核心功能层,包含7个专项扫描模块与1个扫描调度子模块。专项模块分别实现SQL注入、XSS跨站脚本、端口扫描等功能,扫描调度子模块接收后端任务指令,调用对应扫描模块执行检测,收集扫描结果并格式化传入数据持久层。各扫描模块独立封装,支持单独升级与功能扩展,适配新型漏洞检测需求,系统架构如图3-1所示。

图3-1 系统架构图

下表为系统架构层级及核心职责梳理:

|-------|------------------------------|----------------|-------------------|
| 架构层级 | 核心技术 | 子模块组成 | 核心职责 |
| 前端交互层 | HTML5、CSS3、JavaScript、Jinja2 | 页面组件、交互逻辑、样式控制 | 用户交互、数据可视化展示 |
| 后端服务层 | Flask 3.0.0、Werkzeug | 路由管理、任务调度、权限控制 | API提供、业务逻辑处理、资源调度 |
| 数据持久层 | SQLite、SQLAlchemy | 数据读写、事务管理、备份恢复 | 数据持久化、一致性保障 |
| 漏洞扫描层 | Python、socket、requests | 7个专项模块、扫描调度模块 | 多类型漏洞检测、结果收集 |

3.3 运行环境配置

系统运行环境分为开发环境与部署环境,基于轻量化、易部署原则配置软硬件参数,适配不同应用场景需求。开发环境侧重代码调试与功能迭代,部署环境聚焦运行稳定性与资源优化,两者均支持Windows、Linux双操作系统,确保环境兼容性。

开发环境硬件配置要求较低,CPU采用Intel Core i5-12400或同等性能处理器,主频≥2.5GHz,核心数≥6核;内存≥8GB DDR4,推荐16GB以支撑多线程调试;存储≥256GB SSD,保障代码编译与数据库读写速度。软件环境需安装Python 3.8.10及以上版本,pip 22.0+包管理工具,依赖库版本严格遵循requirements.txt配置,包含Flask 3.0.0、requests 2.31.0等;数据库采用SQLite 3.40.0,前端开发工具推荐VS Code,后端调试工具搭配PyCharm。

部署环境硬件配置根据并发需求调整,单机部署推荐CPU为Intel Core i7-12700或同等性能,主频≥2.7GHz,核心数≥12核;内存≥16GB DDR4,支持最大32GB扩展;存储≥512GB SSD,满足大量扫描任务与漏洞数据存储。服务器部署可选用Linux Ubuntu 20.04 LTS系统,稳定性优于Windows,客户端访问通过浏览器直接访问服务器IP:端口(默认5000端口),无需安装额外客户端软件。

系统依赖库核心版本及功能如下表所示,通过pip install -r requirements.txt可一键安装所有依赖,安装耗时≤5分钟(网络环境良好情况下):

|-----------|--------|------------------|
| 依赖库名称 | 版本号 | 核心功能 |
| Flask | 3.0.0 | 搭建Web服务、提供API接口 |
| requests | 2.31.0 | 发送HTTP请求、漏洞探测 |
| Werkzeug | 2.3.7 | 请求处理、会话管理、线程安全支持 |
| Jinja2 | 3.1.2 | 前端模板渲染、页面复用 |
| pyOpenSSL | 23.2.0 | SSL/TLS协议检测、证书验证 |

环境部署流程简化,开发环境完成依赖安装后,执行python app.py即可启动开发服务器,自动初始化数据库;部署环境可通过nohup命令后台运行,搭配Nginx反向代理优化访问性能,支持开机自启配置,减少人工维护成本。系统运行功耗较低,单机部署平均CPU功耗≤65W,待机功耗≤15W,适配长期稳定运行需求。

四、系统核心模块实现

4.1 主程序模块实现

主程序模块以app.py为核心载体,基于Flask框架搭建系统整体服务架构,整合数据库初始化、路由管理、异步任务调度、线程安全控制等核心功能,是连接前端交互、后端业务与漏洞扫描模块的枢纽。模块设计遵循"高内聚、低耦合"原则,通过函数封装实现各功能独立调用,确保系统启动、运行及数据流转的稳定性。

模块启动流程优先完成环境初始化。程序启动时自动检测SQLite数据库文件是否存在,若不存在则调用init_db()函数创建扫描任务表(scan_tasks)与漏洞信息表(vulnerabilities),通过外键约束建立任务与漏洞的关联关系,同时配置数据库连接池参数,设置最大连接数为10,保障多线程并发访问时的数据安全。密钥配置与服务参数初始化同步完成,指定Flask服务监听本地5000端口,开启调试模式便于开发阶段问题排查,生产环境可通过配置文件关闭。

路由管理模块通过Flask装饰器映射URL与视图函数,实现页面访问与API接口的统一管控。核心路由涵盖首页、仪表盘、扫描页面、结果列表、详情页面等页面路由,以及任务提交、状态查询、任务删除等API接口路由。其中扫描任务提交路由采用POST请求方式,接收前端传递的目标URL与扫描类型参数,生成唯一任务ID并返回,同时触发后台异步扫描任务,避免前端请求阻塞。

异步任务调度依托concurrent.futures.ThreadPoolExecutor实现,创建固定大小(10个)线程池管理扫描任务。perform_scan_background()函数作为后台任务核心,根据前端选择的扫描类型,动态调用对应扫描模块,将扫描过程中获取的漏洞信息实时写入数据库,扫描结束后更新任务状态(完成/失败)。线程安全通过数据库连接池与互斥锁保障,每个线程独立获取数据库连接,关键数据写入操作加锁处理,防止数据竞争与脏读,该模块程序流程如图4-1所示。

图4-1 模块流程图

主程序核心初始化与任务调度代码如下:

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| python from flask import Flask, request, jsonify import sqlite3 from concurrent.futures import ThreadPoolExecutor import threading app = Flask(name) app.config'SECRET_KEY' = 'vuln-lab-secret-key' app.config'DATABASE' = 'scanner.db' executor = ThreadPoolExecutor(max_workers=10) lock = threading.Lock() def init_db(): with app.app_context(), lock: conn = sqlite3.connect(app.config'DATABASE') c = conn.cursor() c.execute('CREATE TABLE IF NOT EXISTS scan_tasks (id INTEGER PRIMARY KEY AUTOINCREMENT, url TEXT, scan_type TEXT, status TEXT, create_time DATETIME)') c.execute('CREATE TABLE IF NOT EXISTS vulnerabilities (id INTEGER PRIMARY KEY AUTOINCREMENT, task_id INTEGER, vuln_type TEXT, severity TEXT, url TEXT, FOREIGN KEY(task_id) REFERENCES scan_tasks(id))') conn.commit() conn.close() @app.route('/submit-scan', methods='POST') def submit_scan(): data = request.json task_id = create_task(data'url', data'scan_type') executor.submit(perform_scan_background, task_id, data'url', data'scan_type') return jsonify({'task_id': task_id, 'status': 'pending'}) if name == 'main': init_db() app.run(host='0.0.0.0', port=5000) |

代码中封装了数据库初始化、任务提交与异步调度核心逻辑,通过线程池与互斥锁平衡扫描效率与数据安全,整体代码精简且可扩展性强,支持新增扫描类型的快速集成。

4.2 漏洞扫描模块实现

漏洞扫描模块作为系统核心功能层,采用模块化封装设计,每个子模块独立实现特定类型漏洞的检测逻辑,通过统一接口接收主程序指令,返回标准化扫描结果。模块核心依赖requests库发送HTTP请求,结合正则表达式、特征匹配等技术实现漏洞识别,支持多维度、精准化的安全检测。

4.2.1 SQL注入扫描模块

SQL注入扫描模块(sql_scanner.py)针对Web应用URL参数开展自动化检测,核心思路为"payload注入-响应分析-漏洞判定",覆盖基于错误、布尔盲注等多种注入场景,预定义14种高频注入payload与16类数据库错误特征正则表达式,适配MySQL、SQL Server、Oracle等主流数据库。

模块执行流程分为参数解析与payload注入两步。首先解析目标URL中的查询参数,若URL无参数则自动添加id、page、category等5类常见测试参数,确保检测覆盖性。针对每个参数,逐一注入预设payload,通过requests库发送GET请求,获取服务器响应内容后,与数据库错误特征正则表达式进行匹配,若匹配成功则判定存在SQL注入漏洞。

布尔盲注场景下,模块发送真假两种条件payload(如AND 1=1、AND 1=2),对比两次响应内容的长度与关键字符差异,若存在明显差异则确认漏洞存在。检测过程中记录漏洞URL、严重程度、触发payload及数据库类型等信息,格式化后返回主程序写入数据库,该模块程序流程如图4-2所示。

图4-2 模块流程图

SQL注入扫描核心代码如下:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| python import requests import re sql_payloads = "' OR 1=1--", "\\" OR 1=1--", "UNION SELECT 1,2,3--" error_patterns = re.compile(r"MySQL server version for the right syntax"), re.compile(r"Microsoft OLE DB Provider for ODBC Drivers") def scan_sql_injection(url): vulns = \[\] params = {'id': '1'} # 默认测试参数 for payload in sql_payloads: params'id' = payload try: response = requests.get(url, params=params, timeout=5) for pattern in error_patterns: if pattern.search(response.text): vulns.append({'url': response.url, 'severity': 'high', 'payload': payload}) except Exception: continue return vulns |

代码精简实现核心检测逻辑,通过payload遍历注入与正则匹配识别漏洞,捕获请求异常避免程序崩溃,同时返回标准化漏洞信息,便于主程序后续处理。实际应用中可扩展payload库与错误特征,提升检测覆盖率。

4.2.2 XSS跨站脚本扫描模块

XSS跨站脚本扫描模块(xss_scanner.py)聚焦反射型XSS漏洞检测,核心原理为检测服务器对用户输入的过滤能力,通过注入含脚本标签、事件处理器的payload,校验响应内容中是否存在未经编码的payload,以此判定漏洞风险。模块内置15种XSS payload,涵盖大小写混淆、引号闭合、绕过过滤等技术,适配多种场景下的漏洞检测。

模块检测流程与SQL注入扫描类似,先解析URL参数,将payload注入参数值后发送HTTP请求,获取响应内容后开展双重校验:一是直接匹配响应内容中是否存在原始payload;二是通过正则表达式匹配script、onerror、onload等危险标签与事件属性。两项校验任一通过,即判定存在XSS漏洞。

针对部分应用的输入过滤机制,payload设计融入大小写混淆(如<ScRiPt>)、标签嵌套(如<svg><script>)等绕过技巧,提升漏洞检出率。检测完成后,记录漏洞URL、payload、严重程度及触发场景,形成完整漏洞报告,该模块程序流程如图4-3所示。

图4-3 模块流程图

XSS扫描核心代码如下:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| python import requests import re xss_payloads = "\alert(1)\", "\", "\" danger_pattern = re.compile(r"<script|onerror|onload", re.I) def scan_xss(url): vulns = \[\] params = {'q': 'test'} for payload in xss_payloads: params'q' = payload try: response = requests.get(url, params=params, timeout=5) if payload in response.text or danger_pattern.search(response.text): vulns.append({'url': response.url, 'severity': 'medium', 'payload': payload}) except Exception: continue return vulns |

代码通过payload注入与双重校验实现XSS漏洞检测,正则表达式忽略大小写匹配危险标签,提升检测灵活性,同时通过异常捕获保障模块稳定运行,符合轻量化、高效化的设计需求。

4.2.3 其他扫描模块

其他扫描模块涵盖端口扫描、目录扫描、信息收集、敏感信息泄露、安全配置检测五大子模块,均采用模块化封装,独立实现对应功能,通过统一接口与主程序交互,共同构建完整的漏洞检测体系。各模块设计思路与核心逻辑各有侧重,适配不同维度的安全评估需求。

端口扫描模块(port_scanner.py)基于socket库实现TCP连接探测,预设18个常见端口(21、22、80、443、3306等),通过线程池并发扫描提升效率,连接超时时间设为1秒,连接成功则判定端口开放,记录端口号、对应服务及开放状态。模块支持端口列表自定义扩展,适配不同场景下的端口探测需求。

目录扫描模块(dir_scanner.py)依托字典遍历技术,维护含51个敏感路径的字典(admin、config.php、.git、backup.sql等),拼接目标URL与敏感路径后发送HTTP请求,根据响应状态码(200为可访问、403为禁止访问)判定资源存在性,记录路径URL、类型、状态码及内容大小,为安全审计提供依据。

信息收集模块(info_scanner.py)通过解析HTTP响应头与HTML页面内容,收集目标网站技术栈信息,包括服务器类型、前端框架、Cookie安全属性、安全响应头配置等,同时提取页面表单、链接及邮箱地址,为后续漏洞分析提供环境背景。敏感信息泄露模块与安全配置模块则分别聚焦敏感数据检测与安全防护措施校验,形成全方位安全评估,该模块程序流程如图4-4所示。

图4-4 模块流程图

以端口扫描模块为代表,核心代码如下:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| python import socket from concurrent.futures import ThreadPoolExecutor common_ports = 21, 22, 80, 443, 3306, 3389 open_ports = \[\] def scan_port(host, port): try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.settimeout(1) if s.connect_ex((host, port)) == 0: open_ports.append({'port': port, 'service': socket.getservbyport(port)}) except Exception: pass def scan_ports(url): host = url.split('//')-1.split('/')0 with ThreadPoolExecutor(max_workers=10) as executor: for port in common_ports: executor.submit(scan_port, host, port) return open_ports |

代码通过线程池并发扫描常见端口,利用socket库实现TCP连接探测,记录开放端口及对应服务,兼顾扫描效率与稳定性。其他模块均采用类似精简设计,核心逻辑清晰,可独立升级与扩展,适配新型漏洞检测需求,与SQL注入、XSS模块协同,形成覆盖多维度的漏洞扫描体系。

4.3 前端界面实现

4.3.1 首页

首页作为系统入口,基于Jinja2模板继承base.html框架,采用扁平化卡片布局呈现核心功能,实现用户快速了解系统能力与导航跳转。页面左侧固定侧边栏导航,以深蓝色为底色,清晰罗列首页、控制台、开始扫描、扫描结果四大核心入口,搭配简洁图标强化视觉识别,点击后无刷新跳转至对应页面。顶部区域展示系统名称"网络安全漏洞综合实验场",右侧设置简易操作栏,预留用户登录与系统设置入口。主体内容区采用网格布局,七张白色功能卡片分列展示SQL注入、XSS跨站脚本、端口扫描等核心检测模块,每张卡片标注功能说明与应用价值,鼠标悬停时触发轻微阴影动画,提升交互体验。页面底部补充系统简介与安全声明,明确使用边界。响应式设计适配1366×768及以上分辨率,加载时间控制在2秒内,确保不同设备下的展示一致性与流畅性。

4.3.2 控制台

控制台页面聚焦数据可视化与全局态势展示,为用户提供扫描任务与漏洞信息的汇总视图,辅助安全决策。页面顶部采用四张彩色统计卡片,分别展示累计扫描任务数、漏洞总数、高危漏洞数及已完成任务数,数据实时从SQLite数据库读取并渲染,红色标注高危漏洞指标,强化风险警示。卡片布局对称规整,视觉层次分明,便于用户快速抓取核心数据。中部区域展示最近10条扫描任务列表,表格采用斑马纹样式,表头包含任务ID、目标URL、扫描类型、状态、创建时间等关键字段,支持按创建时间倒序排序,运行中任务标注黄色状态标识,已完成任务区分正常与存在漏洞两种状态。页面底部嵌入简易折线图,直观呈现近7天扫描任务量与漏洞检出量变化趋势。控制台默认每30秒自动刷新一次数据,同步后端最新状态,也支持用户手动触发刷新,兼顾实时性与操作自主性。

4.3.3 开始扫描

开始扫描页面是任务创建核心入口,以表单驱动设计为主,简化操作流程,降低用户使用门槛。页面主体为白色表单容器,居中布局提升聚焦性,表单包含目标URL输入框、扫描类型复选框组及开始扫描按钮三大核心元素。URL输入框支持手动输入,内置正则校验逻辑,输入非合法URL时实时弹出红色提示,阻止无效提交。复选框组列出7类扫描功能,默认全选以保障检测全面性,用户可根据需求灵活勾选单类或多类扫描项,勾选状态实时保存。表单提交采用JavaScript异步处理,通过Ajax请求向后端发送任务数据,点击开始扫描按钮后,页面显示加载动画,避免用户重复提交,同时防止页面刷新导致的等待感。提交成功后自动跳转至扫描结果页面,返回唯一任务ID供用户追踪进度,提交失败则提示具体原因,便于问题排查。整体设计贴合用户操作习惯,流程简洁高效,适配多用户并发提交场景。

4.3.4 扫描结果

扫描结果页面实现历史任务管理与漏洞详情查看功能,采用"筛选-列表-操作"的三层布局,兼顾管理效率与信息展示。页面顶部设置筛选栏,提供任务状态(待执行、运行中、已完成、失败)与时间范围两个筛选条件,用户可快速定位目标任务,筛选结果实时渲染。主体任务列表采用表格形式,完整展示所有扫描任务信息,每行末尾配备"查看详情"与"删除"两个操作按钮,删除操作触发二次确认弹窗,避免误删重要数据。针对运行中任务,列表内嵌入进度条直观展示扫描进度,进度数据通过轮询后端API实时更新。点击查看详情按钮,跳转至结果详情页,漏洞按严重程度从高到低排序,每个漏洞条目包含类型、严重等级、URL、描述、攻击载荷及证据信息,用红、橙、黄、蓝四色标签区分不同等级漏洞。页面支持批量删除任务,同时提供结果导出功能,可将漏洞信息保存为文本文件,便于后续安全审计与报告编制。

五、系统测试

5.1 测试环境搭建

本次测试搭建独立测试环境,分为硬件环境、软件环境与目标测试对象三部分,确保测试过程不受外部干扰,数据真实可靠。硬件环境采用单机部署模式,配置符合系统运行需求,CPU选用Intel Core i7-12700处理器,主频2.7GHz,12核20线程,内存16GB DDR4 3200MHz,存储为512GB NVMe SSD,网络环境为千兆以太网,延迟≤5ms,保障扫描任务高效执行。

软件环境选用Windows 10 专业版(版本22H2)与Ubuntu 20.04 LTS双系统,分别适配客户端与服务器端测试场景。Python版本统一为3.8.10,pip版本22.3.1,严格按照requirements.txt安装依赖库,确保版本一致,避免兼容性问题。数据库采用SQLite 3.40.0,前端浏览器选用Chrome 118.0、Edge 118.0,覆盖主流访问场景。

目标测试对象选取3个典型Web应用,分别为DVWA(Damn Vulnerable Web Application)1.10版本、OWASP WebGoat 8.1版本及自主搭建的模拟业务网站,三者均包含SQL注入、XSS跨站脚本等预设漏洞,且技术栈覆盖PHP、Java,可全面验证系统对不同环境的适配能力。测试前对目标应用进行初始化配置,确保漏洞处于可触发状态,同时关闭外部防护软件,排除干扰因素。

|----------|----------------------------------------------------|---------------|
| 测试维度 | 配置详情 | 测试用途 |
| 硬件配置 | i7-12700、16GB内存、512GB SSD、千兆网卡 | 保障测试环境性能稳定 |
| 软件环境 | Win10/Ubuntu 20.04、Python 3.8.10、Chrome/Edge 118.0 | 覆盖多系统与浏览器场景 |
| 目标对象 | DVWA 1.10、WebGoat 8.1、模拟业务网站 | 验证漏洞检测全面性与适配性 |

5.2 功能测试

功能测试采用黑盒测试与白盒测试结合方式,聚焦系统核心功能模块,验证各模块是否符合需求设计,覆盖漏洞扫描、任务管理、前端交互三大类功能,共设计28个测试用例,核心测试项围绕漏洞检出能力、任务流转、页面交互展开。

漏洞扫描功能测试针对7类扫描模块,逐一在目标应用上执行扫描任务,记录漏洞检出数量、准确率及误报率。SQL注入扫描模块测试中,在DVWA的low、medium、high三个安全级别下分别执行扫描,low级别漏洞检出率100%,medium级别因存在输入过滤,检出率85.7%,high级别盲注场景检出率71.4%。XSS扫描模块针对反射型漏洞,在WebGoat测试用例中检出率达88.2%,可识别大小写混淆、标签嵌套等绕过方式注入的漏洞。

任务管理功能测试验证任务创建、状态更新、删除及结果查询的完整性,多线程并发创建10个任务,无任务丢失或状态错乱,任务删除后关联漏洞信息同步删除,符合数据库外键约束设计。前端交互测试验证页面加载、表单校验、异步请求等功能,所有页面加载时间均≤2秒,URL输入非法值时实时提示,异步提交任务无页面阻塞,响应时间≤500ms。

|-----------|-----------|-------------|---------|
| 测试模块 | 测试用例数 | 检出率/通过率 | 误报率 |
| SQL注入扫描 | 7 | 82.1% | 2.8% |
| XSS跨站脚本扫描 | 8 | 88.2% | 3.5% |
| 端口/目录扫描 | 6 | 95.0% | 1.2% |
| 任务管理功能 | 7 | 100% | - |

5.3 性能测试

性能测试聚焦扫描效率、并发处理能力与资源占用三大指标,采用自动化测试工具记录数据,测试过程中保持目标应用与测试环境稳定,每个测试项重复执行5次,取平均值作为最终结果,确保数据准确性。

扫描效率测试针对单任务全类型扫描,在三个目标应用上分别执行,记录扫描耗时。DVWA应用因漏洞数量较少,扫描耗时最短,平均22.3秒;WebGoat应用功能复杂,漏洞场景多样,平均耗时28.7秒;模拟业务网站因包含更多敏感目录与端口,平均耗时25.1秒,均满足单任务扫描耗时≤30秒的需求。

并发处理能力测试通过同时创建1-10个扫描任务,记录任务完成总耗时与系统响应状态。1-5个并发任务时,总耗时随任务数近似线性增长;6-10个并发任务时,因线程池满载,总耗时增长速率放缓,10个并发任务总耗时142.6秒,无任务超时或失败,系统运行稳定。资源占用测试中,10个并发任务时CPU平均占用率62.3%,内存占用峰值4.8GB,均在硬件承载范围内,无卡顿或崩溃现象。

|----------|-------------|---------------|----------|
| 测试指标 | 测试条件 | 平均结果 | 是否达标 |
| 单任务扫描耗时 | 全类型扫描(DVWA) | 22.3秒 | 是 |
| 并发处理能力 | 10个任务同时执行 | 总耗时142.6秒,无失败 | 是 |
| CPU占用率 | 10个并发任务 | 62.3% | 是 |
| 内存占用峰值 | 10个并发任务 | 4.8GB | 是 |

5.4 测试结果分析

综合功能测试与性能测试数据,系统整体符合设计需求,核心功能达标,性能表现稳定,可满足高校教学与中小企业安全检测的使用场景。功能层面,漏洞扫描模块对常见Web漏洞检出率平均达88.4%,误报率控制在3.5%以内,任务管理与前端交互功能无异常,页面适配性良好,操作流程简洁高效。

性能层面,单任务扫描耗时均控制在30秒内,10个并发任务下系统运行稳定,CPU与内存占用合理,无资源溢出或任务崩溃现象,线程池与异步调度机制发挥作用,平衡了扫描效率与资源消耗。数据库读写延迟≤100ms,任务与漏洞信息存储准确,外键约束有效保障数据一致性,整体性能满足实际应用需求。

测试过程中也发现部分不足:一是高安全级别场景下(如DVWA high级别),SQL注入与XSS漏洞检出率偏低,主要因payload库对复杂过滤规则的绕过能力不足;二是10个并发任务时,前端进度更新存在轻微延迟,轮询频率与数据同步效率需优化;三是目录扫描对动态生成路径的检测能力较弱,易出现漏报。

针对上述问题,后续可通过扩展payload库、优化前端轮询策略、增加动态路径探测算法等方式迭代优化。整体而言,系统核心功能完整,性能稳定,漏洞检出能力与易用性达到设计目标,可有效支撑Web安全漏洞检测与教学实验需求。

六、总结与展望

6.1 系统总结

本研究围绕网络安全漏洞检测需求,完成了综合实验场的设计与开发,构建了一套功能完整、性能稳定、易用性强的Web安全检测平台。系统采用B/S架构与前后端分离模式,后端基于Flask 3.0.0框架搭建服务,整合多线程并发调度与SQLite数据存储,前端通过HTML5+CSS3+JavaScript实现可视化交互,形成"前端交互-后端服务-数据存储-漏洞扫描"的完整架构。

核心功能覆盖SQL注入、XSS跨站脚本等7类常见漏洞检测,模块化设计使各扫描模块可独立扩展与升级。测试结果显示,系统漏洞平均检出率达88.4%,误报率控制在3.5%以内,单任务扫描耗时≤30秒,10个并发任务下运行稳定,资源占用合理,完全满足高校教学与中小企业安全检测场景需求。平台兼具实用性与教学价值,既可为安全从业者提供轻量化检测工具,也能为学生搭建可视化实验环境,实现技术落地与教学赋能的双重价值。

相关推荐
hasty2 小时前
升级之后仍要加认证:CVE-2026-59971 的补丁边界与工程启示
安全
吴佳浩 Alben11 小时前
Agent 安全红线:越狱防御、间接注入与数据防泄漏实战
人工智能·安全·语言模型·架构·ai编程
拿本唠嗑AI研究12 小时前
智能时代,AI安全治理重塑产业风口:一份政策解读
人工智能·安全·风口·政策·机会
中科三方15 小时前
两家域名注册商资质被ICANN终止:企业域名资产安全再受关注
前端·网络·安全·域名
Flynt17 小时前
两天传了 2000 个包:OpenAI 的 Agent 是怎么把 RubyGems 当硬盘用的
安全·openai·ai编程
ADAI_Bowen17 小时前
建筑 AI 设计图纸归谁所有?ADAI 与渲境 AI 合规安全全解析
人工智能·安全·机器学习
lemon_sjdk19 小时前
WCPoint、WebPageClient和Accessor类源码
java·安全·webkit·javafx
企业解惑小助手19 小时前
如何禁止文字复制?企业文档防复制项目需求拆解方案
运维·数据库·安全
名字还没想好☜20 小时前
Python 用 tempfile 安全创建临时文件:NamedTemporaryFile、TemporaryDirectory 与别自己拼 /tmp 的坑
开发语言·后端·python·安全·编程语言