AI安全扫描神器:一键修复网站漏洞
一、这个项目是什么
漏洞哨兵 11-S 是一个 AI 驱动的 Web 安全配置扫描与修复平台。
用户输入一个网址,系统自动检测:
- HTTPS/TLS 证书配置
- 安全响应头(HSTS、CSP、X-Frame-Options 等 15+ 项)
- Cookie 安全属性(HttpOnly、Secure、SameSite)
- CORS 跨域策略
- 敏感路径暴露(/.git/、/.env 等)
- WAF 识别(Cloudflare、阿里云盾等 7 家)
- 服务器信息泄露
然后给出 100 分制安全评分,并生成 Nginx、Apache、Express、Flask、Spring Boot、Cloudflare 等 6 种平台的修复配置。用户把配置贴到自己服务器上,重新扫描就能看到评分提升。
在线体验: https://vuln-sentinel-v11-s.onrender.com
测试账号: demo / demo123
GitHub: GitHub - tomjoy248-crypto/vuln-sentinel · GitHub
二、为什么做这个
我之前在补天平台做过漏洞挖掘,发现一个规律:
绝大多数中小网站的安全问题,不是 SQL 注入、0day 这些高级漏洞,而是最基础的安全配置缺失。
- 没有 HSTS → SSL 降级攻击
- 没有 CSP → XSS 攻击
- Cookie 不设 HttpOnly → 会话劫持
- CORS 配置为
*→ 数据被任意网站读取 - 敏感文件暴露 → 源码泄露
这些问题修复成本极低(加一行配置的事),但很多中小网站根本不知道自己有这些问题。
现有工具的问题:
| 工具 | 问题 |
|---|---|
| OWASP ZAP | 门槛太高,中小企业看不懂报告 |
| Nikto | 只扫描,不给修复方案 |
| 在线扫描站 | 误报多,而且要钱 |
所以我想做一个低门槛、有修复建议、能验证效果的工具。
三、技术选型
| 层 | 技术 | 为什么选它 |
|---|---|---|
| 后端 | FastAPI | 异步支持好,自带 Swagger 文档 |
| 前端 | 单文件 HTML + CSS + JS | 离线也能演示,不依赖框架 |
| 数据库 | SQLite | 轻量,一个文件搞定 |
| HTTP 请求 | httpx(异步) | 支持 asyncio 并发扫描 |
| DNS 查询 | dnspython | 检查域名解析和证书链 |
| 认证 | JWT + bcrypt | 轻量用户系统 |
| PDF 报告 | reportlab | 纯 Python 生成,不依赖外部服务 |
| 定时任务 | APScheduler | 自动巡检功能 |
| 部署 | Docker + Render | 免费额度够用 |
开发工具:TRAE AI IDE(全程只用这个,没用过 VS Code 或 PyCharm)
四、开发过程
第 1 阶段:跑通基础扫描(最难的起点)
最开始我连 FastAPI 都不熟。我跟 TRAE 说:
"我想做一个工具,输入网址,检查安全响应头,返回评分和问题列表。"
TRAE 帮我生成了第一版代码:
# TRAE 生成的第一版扫描逻辑(简化版) async def scan_url(url: str): headers, is_https, final_url, error = await fetch_headers(url) if error: return {"error": error} findings = [] # 检查 HSTS if "strict-transport-security" not in headers: findings.append({ "category": "HTTP Headers", "name": "HSTS 缺失", "severity": "high", "description": "未设置 Strict-Transport-Security 头", "fix": "add_header Strict-Transport-Security 'max-age=31536000' always;" }) # 检查 CSP if "content-security-policy" not in headers: findings.append({ "category": "HTTP Headers", "name": "CSP 缺失", "severity": "high", # ... }) return {"findings": findings, "score": calculate_score(findings)}
第一版跑起来很简单,但问题很快就来了。
第 2 阶段:踩坑与迭代
踩坑 1:异步客户端崩溃
扫描几个网站后,程序直接崩了:
Event loop is closed
原因: FastAPI 的依赖注入每次请求创建新 httpx 客户端,但事件循环在请求结束后被关闭。
TRAE 的解决方案: 用 asynccontextmanager 管理客户端生命周期,全局单例,atexit 注册关闭钩子。
# 修复后 @asynccontextmanager async def get_http_client(): async with httpx.AsyncClient(timeout=15.0) as client: yield client # FastAPI 启动时初始化 @app.on_event("startup") async def startup(): app.state.client = await get_http_client().__aenter__()
踩坑 2:敏感路径误报
扫描 /robots.txt 时,把正常的 User-agent: * 误判为"敏感信息泄露"。
原因: 早期版本只看状态码 200,不看内容。
修复: 加入内容特征校验:
SENSITIVE_PATTERNS = [ r"BEGIN RSA PRIVATE KEY", r"password\s*=\s*['\"]", r"api_key\s*=\s*['\"]", r"DB_PASSWORD", r"AWS_SECRET", ] def check_sensitive_content(content: str, path: str) -> bool: for pattern in SENSITIVE_PATTERNS: if re.search(pattern, content, re.IGNORECASE): return True return False
误报率从 30% 降到 0%。
踩坑 3:字段不统一
扫描结果里 redirected 字段有时有、有时没有,前端解析直接报错。
TRAE 帮忙定位: fetch_headers 在某些分支没返回 redirected,补上默认值 False 就解决了。
踩坑 4:AI 顾问文字竖排
CSS 里有一行 .ai-msg { display: flex; } 把消息气泡变成了 flex 容器,导致文字被挤压成每个字符一行。
修复: 改成 .ai-msgs .ai-msg { display: flex; },只给新版消息容器加 flex,旧版保持块级。
第 3 阶段:功能补全
从"能扫描"到"能卖钱",需要这些功能:
V10 → 风险分层(确认/疑似/公开信息) V11 → 修复配置生成(6 种平台) V11.3 → 复测对比(重新扫描看评分变化) V11-S → AI 安全顾问 + 离线演示 + 报告导出
每个功能都是跟 TRAE 说需求,它生成代码,我测试,有 Bug 再改。
修复配置生成器的核心逻辑:
FIX_TEMPLATES = { "hsts": { "nginx": 'add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;', "apache": 'Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"', "express": "app.use(helmet({ strictTransportSecurity: { maxAge: 31536000, includeSubDomains: true } }));", "flask": "response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains'", "spring": "@Bean\npublic SecurityFilterChain filterChain(HttpSecurity http) {\n http.headers().httpStrictTransportSecurity(hsts -> hsts\n .includeSubDomains(true)\n .maxAgeInSeconds(31536000));\n return http.build();\n}", "cloudflare": "在 Cloudflare Dashboard → Rules → Transform Rules 中添加:\nStrict-Transport-Security: max-age=31536000; includeSubDomains" }, # ... 15+ 个修复模板 }
第 4 阶段:AI 安全顾问
AI 安全顾问有两种模式:
- 规则引擎(默认):基于关键词匹配,内置 50+ 安全知识条目
- OpenAI 兼容 LLM(可选):用户自己配置 API Key 启用
规则引擎的实现:
KNOWLEDGE_BASE = [ { "keywords": ["hsts", "https", "证书", "strict-transport"], "answer": """**HSTS(HTTP Strict Transport Security)** 强制浏览器始终用 HTTPS 访问该网站。 **Nginx 修复:**
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
**风险等级:** 高(SSL 降级攻击)""" }, # ... 50+ 条 ]
第 5 阶段:部署上线
用 Docker + Render 部署,render.yaml 配置好自动识别:
services: - type: web name: vuln-sentinel-v11-s env: docker plan: free
推送代码后 Render 自动构建部署,全程零运维。
从"能扫描"到"能卖钱",需要这些功能:
V10 → 风险分层(确认/疑似/公开信息) V11 → 修复配置生成(6 种平台) V11.3 → 复测对比(重新扫描看评分变化) V11-S → AI 安全顾问 + 离线演示 + 报告导出
每个功能都是跟 TRAE 说需求,它生成代码,我测试,有 Bug 再改。
修复配置生成器的核心逻辑:
FIX_TEMPLATES = { "hsts": { "nginx": 'add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;', "apache": 'Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"', "express": "app.use(helmet({ strictTransportSecurity: { maxAge: 31536000, includeSubDomains: true } }));", "flask": "response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains'", "spring": "@Bean\npublic SecurityFilterChain filterChain(HttpSecurity http) {\n http.headers().httpStrictTransportSecurity(hsts -> hsts\n .includeSubDomains(true)\n .maxAgeInSeconds(31536000));\n return http.build();\n}", "cloudflare": "在 Cloudflare Dashboard → Rules → Transform Rules 中添加:\nStrict-Transport-Security: max-age=31536000; includeSubDomains" }, # ... 15+ 个修复模板 }
第 4 阶段:AI 安全顾问
AI 安全顾问有两种模式:
- 规则引擎(默认):基于关键词匹配,内置 50+ 安全知识条目
- OpenAI 兼容 LLM(可选):用户自己配置 API Key 启用
规则引擎的实现:
KNOWLEDGE_BASE = [ { "keywords": ["hsts", "https", "证书", "strict-transport"], "answer": """**HSTS(HTTP Strict Transport Security)** 强制浏览器始终用 HTTPS 访问该网站。 **Nginx 修复:**
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
**风险等级:** 高(SSL 降级攻击)""" }, # ... 50+ 条 ]
第 5 阶段:部署上线
用 Docker + Render 部署,render.yaml 配置好自动识别:
services: - type: web name: vuln-sentinel-v11-s env: docker plan: free
推送代码后 Render 自动构建部署,全程零运维。
五、项目架构
vuln-sentinel/ ├── main.py # FastAPI 后端(150+ API) ├── static/ │ └── index.html # 单文件前端(离线可用) ├── tests/ # 186 个测试用例 ├── demo-target/ # 内置靶场(演示修复效果) ├── Dockerfile └── render.yaml
核心 API:
| 端点 | 说明 |
|---|---|
POST /api/scan |
执行安全扫描 |
GET /api/report/{id} |
下载 PDF 报告 |
POST /api/fix |
生成修复配置 |
POST /api/ai-advisor |
AI 安全顾问 |
POST /api/compare |
两次扫描对比 |
六、最终效果
扫描 example.com:
- 评分:61/100(中风险)
- 发现 8 个安全问题
- 一键生成 6 种平台修复配置
- 复测后评分提升
内置靶场 demo-target:
- 修复前:30 分 / 11 个漏洞 / 高风险
- 应用修复配置后:80 分 / 1 个漏洞 / 低风险
七、用 TRAE 开发的感受
整个过程只用 TRAE,没用过 VS Code。
最大的感受是:AI 不只是写代码,更像一个能讨论需求的开发伙伴。
- 说"我想加一个修复配置生成器",它不只是写代码,还会问"你要支持哪些平台?"
- 说"扫描结果里有时候字段缺失",它能直接定位到具体哪一行没返回值
- 说"AI 顾问文字变成竖排了",它分析 CSS 后发现是 flex 容器宽度问题
但也有局限:
- 复杂的跨文件重构,AI 有时会漏改
- 大文件(main.py 8000+ 行)的上下文理解有时不够准确
- 需要人知道"该做什么",AI 负责"怎么做"
八、总结
从想法到可上线的 Demo,大概经历了这些:
想法 → 基础扫描 → 踩坑修复 → 功能迭代 → AI 顾问 → 部署上线 → 清理提交
整个项目 186 个测试用例全部通过,代码零外部依赖(除了 pip 包)。
如果你也想用 TRAE 做项目,我的建议是:
- 把需求拆小,一步一步来
- 跑通最小可用版本再迭代
- 遇到 Bug 直接把报错丢给 TRAE
- 不要一次性加太多功能
在线体验: https://vuln-sentinel-v11-s.onrender.com
GitHub: GitHub - tomjoy248-crypto/vuln-sentinel · GitHub
有问题欢迎评论区讨论。
我其实下那个说的是AI真的走进来了 我用TRAE和codex二个ai软件就可以搓出来这个东西 那以后这种的只会更加简单 所以去拥抱ai吧
更多推荐

所有评论(0)