当前位置:网站首页 >  百科

《程序漏洞修复实操指南:从定位到验证的完整落地步骤》

时间:2026年05月29日 13:47:16 来源:易频IT社区

一、前置准备:搭建可实操的漏洞测试环境

本次实操以Python Flask Web程序为例,全程零门槛,所有工具和代码均可直接复制使用。

1. 基础环境安装

  • Python3.6+:官网下载地址 https://www.python.org/downloads/,安装时勾选“Add Python to PATH”
  • Flask框架:安装命令 pip install flask
  • OWASP ZAP(漏洞扫描工具):Ubuntu执行 sudo apt update && sudo apt install zaproxy;Windows下载地址 https://github.com/zaproxy/zaproxy/releases/latest;Mac执行 brew install zaproxy

2. 漏洞演示项目搭建

新建文件 vuln_demo.py,复制以下完整代码,该项目包含SQL注入和XSS两类常见漏洞:

from flask import Flask, request, escape
import sqlite3
app = Flask(__name__)
@app.route('/user')
def get_user():
username = request.args.get('name')
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
存在SQL注入漏洞的代码(字符串拼接用户输入)
cursor.execute(f"SELECT  FROM users WHERE username='{username}'")
user = cursor.fetchone()
conn.close()
return str(user)
@app.route('/comment')
def add_comment():
content = request.args.get('content')
存在XSS漏洞的代码(直接返回用户输入)
return f"你的评论:{content}"
if __name__ == '__main__':
初始化测试数据库
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username TEXT)')
插入测试用户
cursor.execute("INSERT INTO users (username) VALUES ('test1')")
conn.commit()
conn.close()
启动服务
app.run(debug=True)

在命令行执行 python vuln_demo.py,服务启动后会监听http://127.0.0.1:5000。

二、漏洞定位:用OWASP ZAP精准识别漏洞

1. 漏洞扫描操作

  • 打开OWASP ZAP,在Quick Start面板的“URL to attack”输入框中,输入 http://127.0.0.1:5000
  • 点击面板中的“Attack”按钮,等待扫描完成(约10-30秒,取决于网速)

2. 漏洞确认

扫描完成后,切换到左侧的“Alerts”标签,会列出所有检测到的漏洞。本次实操需关注两类漏洞:

  • SQL Injection - SQLite:对应 /user 接口的SQL注入
  • XSS Reflected:对应 /comment 接口的反射型XSS

关键操作:必须点击漏洞名称,查看“Evidence”字段,确认漏洞是由用户输入拼接导致,避免误报。

三、漏洞修复:针对性修改代码彻底消除风险

1. SQL注入漏洞修复

《程序漏洞修复实操指南:从定位到验证的完整落地步骤》

原漏洞代码使用字符串拼接用户输入,修改为 参数化查询 即可彻底修复,替换 /user 接口的代码为:

@app.route('/user')
def get_user():
username = request.args.get('name')
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
修复:使用参数化查询,占位符?替代用户输入
cursor.execute("SELECT  FROM users WHERE username=?", (username,))
user = cursor.fetchone()
conn.close()
return str(user)

注意:参数化查询的占位符数量必须和输入参数数量一致,参数需用元组包裹(即使单个参数也要加逗号)。

2. 反射型XSS漏洞修复

原漏洞代码直接将用户输入返回前端,修改为 转义用户输入 即可修复,替换 /comment 接口的代码为:

@app.route('/comment')
def add_comment():
content = request.args.get('content')
修复:使用flask内置escape函数转义所有特殊字符
return f"你的评论:{escape(content)}"

注意:所有用户可控的输入,包括URL参数、表单数据,在返回给前端前必须转义,禁止直接输出。

四、修复验证:确保漏洞彻底消除且功能正常

1. 漏洞重新扫描

  • Ctrl+C 终止当前Flask服务,重新执行 python vuln_demo.py 启动服务
  • 再次用OWASP ZAP扫描http://127.0.0.1:5000,查看“Alerts”标签,确认SQL注入和XSS漏洞消失
  • 手动验证漏洞:在浏览器访问 http://127.0.0.1:5000/user?name=test1' or 1=1--,原漏洞会返回所有用户,修复后仅返回空值,无异常数据泄露
  • 手动验证XSS:访问 http://127.0.0.1:5000/comment?content=,修复后前端会输出转义后的内容,不会触发弹窗。

2. 本地功能测试

测试所有关联接口,确保功能正常:

  • 访问 /user?name=test1,返回正确的测试用户数据
  • 访问 /comment?content=测试内容,返回“你的评论:测试内容”,无异常
  • 重点测试边界输入:超长字符串、特殊字符(如引号、<>)、空值,确保无功能崩溃。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图