jaurakunal/isitsecure
GitHub: jaurakunal/isitsecure
面向 Web 应用的 AI 驱动一体化安全扫描器,在一条命令中集成 SAST、DAST 和 LLM 审查来发现并自动修复漏洞。
Stars: 9 | Forks: 0
# isitsecure
[](https://github.com/jaurakunal/isitsecure/actions/workflows/ci.yml)
[](https://github.com/jaurakunal/isitsecure/actions/workflows/codeql.yml)
[](https://github.com/jaurakunal/isitsecure/releases)
[](LICENSE)
[](https://www.python.org)
面向现代 Web 应用的 AI 驱动安全扫描器。在单次扫描中集成 SAST + DAST + LLM 代码审查。
专为发布 Web 应用且需要了解其代码是否安全的开发者和 **vibe coder** 打造——无需成为安全专家。
**支持:** TypeScript/JavaScript (Next.js, Express, tRPC)、Python (Django, FastAPI, Flask)、Java/Kotlin (Spring Boot) ——以及任何用于 DAST 的 HTTP API。
## 目录
- [它的作用](#what-it-does)
- [安装](#install) · [快速开始](#quick-start) · [成本](#what-it-costs)
- [扫描模式](#scan-modes) · [扫描深度](#scan-depth)
- [扫描内容](#what-it-scans) — [DAST](#dast-scanners--tests-your-live-app) · [特殊 DAST](#special-dast-scanners-8) · [SAST](#sast-scanners-17--analyzes-your-code) · [LLM](#llm-powered-analysis-requires-api-key) · [交叉引用](#cross-referencing--guided-dast)
- [语言支持](#language-support) · [输出格式](#output-formats)
- [自动修复](#auto-fix-one-command-to-fix-your-app) · [安全徽章](#security-badge)
- [对比](#how-we-compare) · [未覆盖范围](#what-it-does-not-cover)
- [配置](#configuration) — [API Keys](#api-keys) · [OOB 回调](#oob-callbacks-blind-vulnerability-detection) · [认证扫描](#authenticated-scanning)
- [CLI 参考](#cli-reference) · [Web UI](#web-ui) · [在测试应用上试用](#try-it-on-the-test-app)
- [基准测试](#benchmarks) · [隐私](#privacy) · [架构](#architecture)
- [扫描器文档](#scanner-documentation) · [LSP 设置](#lsp-setup-optional-reduces-false-positives)
- [贡献](#contributing) · [许可证](#license) · [致谢](#acknowledgements)
## 它的作用
isitsecure 默认运行 **40 个基于规则的扫描器** —— 使用 `--depth deep` 时最多可达 **44 个** —— (加上可选的 AI 代码审查),只需一条命令即可针对您的 Web 应用进行扫描。它结合了商业工具分开销售的四种方法:
- **SAST (静态分析)** — 扫描源代码以查找漏洞,而无需运行它
- **DAST (动态分析)** — 通过发送真实的 HTTP 请求来测试您的在线应用
- **LLM 代码审查** — 使用 AI 查找模式匹配器无法检测到的业务逻辑漏洞
- **AI 修复生成** — 为每个发现生成带有 unified diff 的代码补丁
独特之处:
1. **SAST 发现会自动生成针对性的 DAST 测试**。代码显示没有权限检查 -> 扫描器发送未经身份验证的请求并确认其可被利用。
2. **AI 生成修复,而不仅仅是报告**。`--output fixes` 会生成一个 Markdown 修复计划,您可以将其粘贴到 Cursor 或 Claude Code 中。
```
Code → SAST → Findings → Guide DAST → Test → Cross-Reference → LLM Triage → Report → Fixes
↑ |
└──────────────── LSP validates / suppresses false positives ───────────────────────────┘
```
## 安装
**要求:** Python 3.11+ 和 `git`。(isitsecure 不在 PyPI 上 —— 那里的 `isitsecure` 名称是一个不相关的项目,所以不要 `pip install` 它。)
### 快速安装(推荐)
安装程序会验证 Python/git,然后克隆代码库、设置隔离环境、安装所有内容并运行首次设置:
```
# macOS / Linux — 下载、查看、运行
curl -fsSLo install.sh https://raw.githubusercontent.com/jaurakunal/isitsecure/main/install.sh
bash install.sh
```
```
# Windows (PowerShell)
irm https://raw.githubusercontent.com/jaurakunal/isitsecure/main/install.ps1 -OutFile install.ps1
./install.ps1
```
如果缺少 Python 或 git,安装程序会告诉您为操作系统安装它们的确切命令并干净地停止——它永远不会留下半完成的状态。
### 手动安装
更喜欢手动操作:
```
# 1. Clone repo
git clone https://github.com/jaurakunal/isitsecure.git
cd isitsecure
# 2. Install 到 virtual environment(推荐)
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 3. Install 所有功能(browser DAST、LLM review、OOB detection)
pip install -e ".[all]"
# 4. 首次 setup — 安装 Chromium browser、language servers,可选择保存 API key
isitsecure setup
```
`pip install -e ".[all]"` 是推荐的安装方式,它会启用所有扫描器。如果您想要更轻量级的安装,这些附加组件是可选的:
| 安装 | 可用功能 |
|---|---|
| `pip install -e .` | 仅 SAST / 仅代码扫描 (`--mode code-only`) |
| `pip install -e ".[browser]"` | 添加 DAST / 在线 URL 扫描(需要运行 `isitsecure setup` 来安装 Chromium) |
| `pip install -e ".[llm]"` | 添加 LLM 代码审查、分类和 AI 修复(需要 API key) |
| `pip install -e ".[all]"` | 所有功能 |
URL/DAST 扫描需要 `[browser]` 附加组件 —— 没有它,`isitsecure scan ` 会退出并提示您安装它。
## 快速开始
```
# Scan 实时 URL(仅 DAST,不需要 API key)
isitsecure scan https://your-app.com --llm none
# Scan 源代码(仅 SAST)
isitsecure scan --repo https://github.com/you/your-app --mode code-only --llm none
# Full scan(SAST + DAST + LLM review)
isitsecure scan https://your-app.com --repo https://github.com/you/your-app --mode full
# 一条命令:scan + fix 所有问题(神奇之处)
isitsecure fix --repo ./your-app
# 或者先 dry-run 以预览 fixes
isitsecure fix --repo ./your-app --dry-run
# 为你的 README 生成 security badge
isitsecure badge --repo ./your-app
# 导出用于 GitHub Code Scanning
isitsecure scan --repo https://github.com/you/your-app --output sarif
# 打开 web UI(面向非 CLI 用户)
isitsecure launch
```
## 成本
isitsecure 是免费且开源的。唯一的成本是用于 AI 驱动功能的 LLM API token:
| 扫描模式 | 需要 API Key | 预估成本 |
|---|---|---|
| **仅 URL**(无 LLM 的 DAST) | 否 | $0 |
| **仅代码**(无 LLM 的 SAST) | 否 | $0 |
| **仅代码 + LLM 审查** | 是 | ~$5–8 |
| **完整扫描**(SAST + DAST + LLM) | 是 | ~$10–15 |
如果没有 API key,您仍然可以使用所有基于规则的扫描器 —— **默认 `quick` 深度下有 40 个**(15 个 DAST + 8 个特殊 DAST + 17 个 SAST),或者 **使用 `--depth deep` 时有 44 个**(增加了 4 个较慢/激进的 DAST 扫描器)。LLM 增加了业务逻辑审查、语义规则验证和智能分类——这些是任何模式匹配器都无法做到的事情。
**支持的 LLM 提供商:** Anthropic (Claude)、Google (Gemini)
## 扫描模式
| 模式 | 作用 | 需要 |
|---|---|---|
| `url-only` | 针对在线 URL 的 DAST 扫描器 | 目标 URL |
| `code-only` | 针对源代码的 SAST 扫描器 | GitHub 仓库 URL |
| `authenticated` | 带登录凭据的 DAST(IDOR、跨用户 BOLA、RLS、权限提升) | URL + 凭据(添加第二个账户以进行跨用户测试) |
| `full` | 所有内容:SAST + DAST + authenticated + LLM 审查 + 交叉引用 | URL + 仓库 + 凭据 + API key |
| `auto`(默认) | 根据您提供的内容检测模式 | 您提供的任何内容 |
## 扫描深度
与模式正交的是,`--depth` 用速度换取覆盖率:
| 深度 | 运行内容 | 何时使用 |
|---|---|---|
| `quick`(默认) | 结构和配置检查、基于错误的注入,以及基于快照的扫描器(header、CORS、RLS、source-map、SRI、客户端暴露、重定向等)。速度快。 | 日常扫描——在很短的时间内完成一次扎实的初步扫描。 |
| `deep` | `quick` 中的所有内容**加上**缓慢/激进的探测:基于时间(盲注)的 SQL 注入、主动 XSS、绕过身份验证的计时、速率限制突发和密码重置流程。 | 当您想要完整的武器库并且可以等待时。 |
```
# Fast pass(默认)
isitsecure scan https://your-app.com --llm none
# Full、aggressive DAST
isitsecure scan https://your-app.com --depth deep --llm none
```
扫描器在运行时会叙述每个阶段和每个扫描器(带有耗时),因此较长的 `deep` 扫描会显示连续的进度,而不是看起来像是卡住了。
## 扫描内容
### DAST 扫描器 — 测试您的在线应用
**总计 19 个** — 15 个在默认的 `quick` 深度下运行;标有 **◆** 的 4 个(较慢/激进的探测)通过 `--depth deep` 添加。
| 扫描器 | 发现内容 |
|---|---|
| XSS 扫描器 **◆** | 反射型、POST body 和基于 DOM 的跨站脚本攻击 |
| 主动注入扫描器 | SQL 注入(基于错误 + 时间,包含 SQLAlchemy/sqlite3/psycopg 错误)、命令注入、NoSQL 注入、XXE、SSTI —— 注入 query、body 和 path 参数 |
| CSRF 扫描器 | 在改变状态的 endpoint 上的跨站请求伪造 |
| 速率限制扫描器 **◆** | 认证 endpoint 上缺失或可绕过的速率限制 |
| 会话扫描器 | 不安全的 token 存储 (localStorage)、缺失 cookie 标志、长期有效的 JWT |
| GraphQL 扫描器 | 启用了 Introspection、无深度限制、批量查询滥用 |
| SSRF 扫描器 | 服务端请求伪造(内部 IP、云元数据) |
| 文件上传扫描器 | 不受限制的文件类型、文件名中的路径遍历 |
| 批量赋值扫描器 | 在请求 body 中接受特权字段(role、isAdmin) |
| 安全 Header 扫描器 | 缺失 CSP、HSTS、X-Frame-Options;服务器版本泄露 |
| CORS 扫描器 | 通配符来源、带有宽松 CORS 的凭据 |
| 开放重定向扫描器 | 未经验证的重定向参数 |
| 绕过认证扫描器 **◆** | 用户名枚举、默认凭据、账户锁定绕过 |
| HTTP 探测扫描器 | 方法篡改、Host header 注入、目录列表、`.env` 泄露 |
| 密码重置扫描器 **◆** | 响应 body 中的 token 泄露、电子邮件枚举、无速率限制 |
| Source Map 扫描器 | 公开暴露的 `.map` 文件泄露原始源代码(已验证,不仅仅是存在) |
| 混合内容扫描器 | 在 HTTPS 页面上加载 `http://` 资源 |
| SRI 扫描器 | 加载没有 Subresource Integrity 哈希的外部 CDN 脚本/样式 |
| 客户端暴露扫描器 | 客户端 JS 中的秘密 —— Supabase `service_role` key、内部 URL、未替换的环境变量占位符 |
### 特殊 DAST 扫描器 (8)
| 扫描器 | 发现内容 |
|---|---|
| IDOR 扫描器 | 通过交换 ID 导致的不安全的直接对象引用,以及使用两个账户进行经过身份验证的跨用户 (BOLA) 测试,并带有匿名访问防误报机制 |
| JWT 扫描器 | Algorithm none 绕过、弱密钥、密钥混淆攻击 |
| RLS 深度扫描器 | 通过 anon key 和跨用户查询绕过 Supabase Row Level Security |
| 权限提升扫描器 | 管理员路由访问、角色自我提升、对象级写入绕过 |
| 认证爬虫 | 基于 Playwright 的登录 + BFS 爬取,以发现经过身份验证的 endpoint |
| 竞态条件扫描器 | 通过并发 mutation 请求导致的 TOCTOU bug |
| DOM XSS 扫描器 | 基于 Playwright 的 sink 挂钩 (innerHTML, eval, location.assign) |
| Body 参数 Fuzzer | 原型污染、类型混淆、通过 JSON body 字段进行的注入 |
### SAST 扫描器 (17) — 分析您的代码
| 扫描器 | 发现内容 |
|---|---|
| Git 秘密扫描器 | Git 历史记录(不仅仅是 HEAD)中的 API key、token 和凭据 |
| 路由权限分析器 | 缺少身份验证的 Next.js/Express/Django/FastAPI/Spring 路由 |
| RLS 策略分析器 | 未启用 Row Level Security 的 Supabase 表 |
| Middleware 分析器 | 不完整的 middleware 覆盖(保护了页面但没有保护 API 路由) |
| Express Middleware 分析器 | 特定于 Express 的身份验证 middleware 缺口 |
| Drizzle Schema 分析器 | 暴露于批量赋值的敏感字段 (isAdmin, role) |
| Prisma Schema 分析器 | 针对 Prisma schema 的类似检查 |
| IaC 扫描器 | Terraform/CloudFormation 配置错误(公共 S3、无加密) |
| Docker 扫描器 | 以 root 身份运行、暴露的端口、`.env` 被复制到镜像中 |
| Shell 脚本扫描器 | 部署脚本中的命令注入 |
| 依赖扫描器 (npm) | package.json 依赖项中已知的 CVE |
| Python 依赖扫描 | requirements.txt / pyproject.toml 中已知的 CVE(Django、Flask、FastAPI、PyJWT 等) |
| Java 依赖扫描器 | pom.xml / build.gradle 中已知的 CVE(Log4Shell、Spring、Struts、Jackson 等) |
| OSV 依赖扫描器 | 针对 Google 的 OSV.dev 数据库进行实时 CVE 查询(20 万+ 漏洞,所有生态系统:npm、PyPI、Maven、Gradle、Go、Rust)—— 无硬编码的 CVE 列表,无需 API key |
| Firebase 规则分析器 | 过于宽松的 Firestore/RTDB 安全规则 |
| OpenAPI 扫描器 | API 规范中暴露的内部 endpoint |
| K8s 扫描器 | 特权 container、无资源限制、hostPath 挂载 |
### LLM 驱动的分析(需要 API key)
| 扫描器 | 发现内容 |
|---|---|
| LLM 代码审查器 | 业务逻辑漏洞:缺少所有权检查、支付中的竞态条件、不正确的授权逻辑 |
| 语义规则验证器 | RLS 策略和 Firebase 规则中的逻辑错误(错误的列引用、租户隔离 bug) |
| LLM 业务逻辑扫描器 | 攻击规划:价格操纵、双重支付、通过应用程序逻辑进行权限提升 |
| LLM 分类服务 | 对发现的问题进行去重、分配优先级、生成带有 A–F 评级的简明所有者摘要 |
| AI 修复生成器 | 为每个发现生成代码补丁—— 粘贴到 Cursor/Claude Code 中进行修复 |
### 交叉引用 + 引导式 DAST
| 功能 | 作用 |
|---|---|
| OpenAPI/Swagger 发现 | 探测 `/openapi.json`、`/swagger.json`、`/v3/api-docs` 并将规范解析为可测试的 endpoint —— 在没有可爬取前端的 API 上发现攻击面 |
| HTML 表单/链接发现 | 从服务器渲染的页面读取 `
标签:CISA项目, 人工智能, 动态应用安全测试, 模块化设计, 特征检测, 用户模式Hook绕过, 自动化修复, 逆向工具, 错误基检测, 静态代码分析