jaurakunal/isitsecure

GitHub: jaurakunal/isitsecure

面向 Web 应用的 AI 驱动一体化安全扫描器,在一条命令中集成 SAST、DAST 和 LLM 审查来发现并自动修复漏洞。

Stars: 9 | Forks: 0

# isitsecure [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/jaurakunal/isitsecure/actions/workflows/ci.yml) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/cas/53/539e9a6bf48ad24469a4363bff3aa68124154549e26592783d3d8577f2acbbfc.svg)](https://github.com/jaurakunal/isitsecure/actions/workflows/codeql.yml) [![Release](https://img.shields.io/github/v/release/jaurakunal/isitsecure)](https://github.com/jaurakunal/isitsecure/releases) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](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 表单/链接发现 | 从服务器渲染的页面读取 `
`/``/查询链接(有界的 url-only 爬取 + 在经过身份验证的爬虫内)—— 在没有 JS API bundle 的经典 MVC 应用上发现攻击面 | | Endpoint 优先级排序 + 时间预算 | 对可能存在漏洞的 endpoint 进行优先排序,并在每个扫描器的时间预算内进行测试,以便在时间耗尽之前覆盖高风险路径 | | SAST->DAST 反馈循环 | SAST 发现生成针对性的 DAST 测试(6 种策略:绕过身份验证、IDOR、注入、批量赋值、竞态条件、RLS 绕过) | | 交叉引用器 | 匹配 DAST + SAST 的发现,以获得高可信度的已确认漏洞 | | 导入图中心性 | 识别被许多高风险路由导入的共享实用程序文件以进行 LLM 审查 | | LSP 身份验证流程追踪 | 使用 TypeScript Language Server 验证身份验证 middleware 是否已真正应用 | ## 语言支持 | 语言 | 路由映射 | 身份验证检测 | 依赖扫描 | DAST | |---|---|---|---|---| | **TypeScript/JavaScript** (Next.js, Express, tRPC, GraphQL) | 是 | 是 | 是 | 是 | | **Python** (Django, FastAPI, Flask) | 是 | 是 | 是 | 是 | | **Java/Kotlin** (Spring Boot) | 是 | 是 | 是 (Maven, Gradle) | 是 | | **Go, Ruby, Rust 等** | 否 | 否 | 否 | 是 (DAST 适用于任何 HTTP API) | DAST 扫描器测试在线 HTTP endpoint,而不受后端语言的限制。SAST 路由映射、身份验证检测和依赖扫描是特定于语言的。 ## 输出格式 ``` isitsecure scan URL --output table # Terminal table (default) isitsecure scan URL --output json # Full JSON report isitsecure scan URL --output html # Self-contained HTML report isitsecure scan URL --output sarif # SARIF 2.1.0 for GitHub Code Scanning isitsecure scan URL --output fixes # AI-generated fix plan (Markdown with diffs) ``` ## 自动修复:一条命令修复您的应用 ``` # Scan 你的代码并自动应用 AI 生成的 fixes isitsecure fix --repo ./my-app # 预览 fixes 而不应用(dry run) isitsecure fix --repo ./my-app --dry-run # 仅 fix critical issues isitsecure fix --repo ./my-app --severity critical ``` 它的作用: 1. 使用所有 SAST 扫描器扫描您的仓库 2. 对于每个带有代码位置的关键/高危发现,将文件发送给 LLM 3. 生成该文件的修复版本 4. 将修复后的代码直接写入您的文件 5. 显示更改内容的摘要 运行后,检查 `git diff` 以审查更改、运行测试并提交。 ## 安全徽章 将安全评级徽章添加到您的 README 中: ``` isitsecure badge --repo ./my-app -o badge.svg ``` 然后将其添加到您的 README 中: ``` ![Security Grade](https://raw.githubusercontent.com/jaurakunal/isitsecure/main/badge.svg) ``` 该徽章显示您的评级(A–F)和发现总数,其样式类似于 shields.io 徽章。 ## 对比 isitsecure 不能替代企业级安全平台。它被设计为**个人开发者或小团队所需的唯一工具**——结合了原本需要 4-5 个独立工具的功能。 ### 只有 isitsecure 能做到(其他 OSS 工具做不到) - SAST 发现会自动生成针对性的 DAST 测试(闭环反馈) - LLM 审查业务逻辑(竞态条件、价格操纵、所有权检查) - 一条命令扫描 + 生成 + 应用 AI 修复(`isitsecure fix`) - 交叉引用 DAST + SAST 的发现,以确认漏洞 - LSP 通过调用链追踪身份验证流程(TypeScript、Python、Java) ### 专门工具更深入的地方 | 需求 | 最佳专门工具 | isitsecure 的对比情况 | |---|---|---| | 深度 SAST(30+ 种语言) | [Semgrep](https://semgrep.dev) | 我们通过 regex+LLM 覆盖 3 种语言(无 taint analysis) | | 具有高级漏洞利用的 DAST | [OWASP ZAP](https://zaproxy.org) / [Burp Suite](https://portswigger.net) | 我们的 DAST 更简单 —— payload 较少,没有 WAF 绕过 | | 秘密扫描(800+ 模式) | [TruffleHog](https://github.com/trufflesecurity/trufflehog) / [Gitleaks](https://github.com/gitleaks/gitleaks) | 我们的 git 扫描器涵盖常见模式,但不详尽 | | Container + IaC 扫描 | [Trivy](https://github.com/aquasecurity/trivy) / [Checkov](https://github.com/bridgecrewio/checkov) | 我们的 IaC/Docker 扫描器是基础级别的 —— 若要深度请使用 Trivy | | 企业合规性 (SOC2, PCI) | [Snyk](https://snyk.io) / [Checkmarx](https://checkmarx.com) | (目前)没有合规性映射 | | 基于模板的漏洞扫描 | [Nuclei](https://github.com/projectdiscovery/nuclei) (28K+ stars) | 不是基于模板的 —— 方法不同 | ### 谁应该使用什么 | 您的身份 | 使用此工具 | |---|---| | 发布 Web 应用的个人开发者 / vibe coder | **isitsecure** —— 一个工具,一条命令 | | 拥有 2.5 万美元以上安全预算的团队 | Snyk + GitHub Advanced Security | | 有合规要求的企业 | Checkmarx / Veracode | | 进行深度漏洞利用的渗透测试人员 | Burp Suite Pro + Nuclei | | 专注于 container/IaC 的 DevOps | Trivy + Checkov + Gitleaks | isitsecure 可以与其他工具很好地配合使用。运行 `isitsecure scan` 以获得 SAST+DAST+LLM 的综合视图,并在需要更深入覆盖的地方使用专门工具。 ## 未覆盖范围 - **正式的 taint analysis** —— 没有跨函数边界的数据流追踪。而是使用 regex + LLM 推理。 - **WAF 绕过** —— DAST payload 不包含高级绕过技术 - **合规性映射** —— (目前)没有 OWASP Top 10、CWE 或 PCI-DSS 标记 - **网络级扫描** —— 无端口扫描、TLS 分析或基础设施枚举 - **移动应用** —— 仅限 Web API - **Go/Ruby/Rust SAST** —— 尚未实现路由映射(通过 OSV 进行 DAST 和依赖扫描仍然有效) ## 配置 ### API Keys 通过环境变量、`.env` 文件或 `~/.isitsecure/config.toml` 设置: ``` # Environment variable export ANTHROPIC_API_KEY=sk-ant-... # 或者使用项目中的 .env file echo "ANTHROPIC_API_KEY=sk-ant-..." > .env # 或者 interactive setup isitsecure setup ``` ### OOB 回调(盲漏洞检测) isitsecure 使用带外(OOB)回调检测盲 SSRF、XXE 和注入漏洞。默认情况下,它使用 `oob.isitsecure.ai` —— 一个运行 [interactsh](https://github.com/projectdiscovery/interactsh) 的免费社区服务器。 **发送了什么数据?** 只有扫描*目标*向 OOB 服务器发出 DNS/HTTP 请求。您的源代码永远不会离开您的机器。 **自托管您自己的服务器:** ``` # Deploy interactsh docker run projectdiscovery/interactsh-server # 在 ~/.isitsecure/config.toml 中将 isitsecure 指向它 [oob] server = "http://oob.yourdomain.com" ``` **完全禁用:** 在配置中的 `[oob]` 下添加 `enabled = false`。 ### 认证扫描 ``` # Supabase auth isitsecure scan https://your-app.com \ --auth-email user@example.com \ --auth-password yourpassword \ --auth-provider supabase # Firebase auth isitsecure scan https://your-app.com \ --auth-email user@example.com \ --auth-password yourpassword \ --auth-provider firebase # Direct token isitsecure scan https://your-app.com \ --auth-provider token \ --auth-token "eyJ..." ``` **跨用户 IDOR / BOLA** —— 提供*第二个*账户,isitsecure 会以两个用户的身份登录,并检查一个用户是否可以读取或改变另一个用户的对象( Broken object-level authorization )。匿名访问防护可抑制来自纯公开 endpoint 的误报。 ``` isitsecure scan https://your-app.com \ --auth-email alice@example.com --auth-password alicepass \ --auth-email-b bob@example.com --auth-password-b bobpass \ --mode authenticated ``` **无前端 / 纯 REST API** —— 使用 `--auth-provider token`,它针对通用的 REST 登录 endpoint 进行登录(自动发现,或使用 `--login-url` 显式传递): ``` isitsecure scan https://api.your-app.com \ --auth-provider token \ --auth-email alice@example.com --auth-password alicepass \ --auth-email-b bob@example.com --auth-password-b bobpass \ --login-url https://api.your-app.com/login ``` ## CLI 参考 ``` isitsecure scan [URL] [OPTIONS] Arguments: URL Target URL to scan (DAST) Options: -r, --repo TEXT GitHub repo URL (SAST) -b, --branch TEXT Git branch [default: main] -m, --mode TEXT Scan mode: auto|url-only|code-only|authenticated|full --depth TEXT Scan depth: quick|deep [default: quick] --llm TEXT LLM provider: anthropic|google|none [default: anthropic] -o, --output TEXT Output format: table|json|html|sarif|fixes [default: table] -f, --output-file TEXT Write report to file --auth-email TEXT Auth email/username for authenticated scanning (user A) --auth-password TEXT Auth password (user A) --auth-provider TEXT Auth provider: supabase|firebase|browser|token (use token for a plain REST login) --auth-email-b TEXT Second user's email — enables cross-user IDOR/BOLA testing --auth-password-b TEXT Second user's password (paired with --auth-email-b) --login-url TEXT Explicit login endpoint (else auto-discovered) --github-token TEXT GitHub token for private repos -v, --verbose Enable debug logging isitsecure launch [OPTIONS] -p, --port INT Port for web UI [default: 3000] --host TEXT Host to bind [default: 127.0.0.1] isitsecure setup Interactive first-time setup isitsecure version Show version ``` ## Web UI 更喜欢 GUI?`isitsecure launch` 会启动由相同扫描引擎支持的本地 Web 界面 —— 无需记住 CLI 标志: ``` isitsecure launch # 在 browser 中打开 http://localhost:3000 ``` 该 UI 提供: - **可视化扫描配置** —— 目标 URL、仓库、扫描模式、AI 提供商和可选的登录凭据 - **实时扫描进度** —— 进度条和流式扫描器日志 - **发现查看器** —— 按严重程度或扫描器过滤,以及全文搜索,每个发现都可展开以查看证据、技术细节和修复措施 - **通俗易懂的风险摘要** —— A–F 评级、关键风险和分阶段的修复计划 - **一键 AI 修复** —— 任何发现上的“生成修复”按钮都会生成内联的 unified diff(一次一个发现) - **报告导出** —— 下载 JSON,或在新标签页中打开自包含的 HTML 报告 - **扫描历史** —— 最近的扫描会在您的浏览器中本地记录 Web 服务器解析您的 LLM API key 的方式与 CLI 相同(`ANTHROPIC_API_KEY`、`.env` 文件或 `isitsecure setup`),因此无需将 key 粘贴到浏览器中即可进行扫描和修复。您仍然可以在扫描表单中输入一个以覆盖它。 ## 在测试应用上试用 该代码库包含 **VibeTasks** —— 一个有意设计了约 50 个安全漏洞的 Next.js + Supabase 应用。以下所有命令均在代码库根目录中运行。 ``` # Scan 捆绑应用的源码(仅 SAST — 快速,不需要 API key) isitsecure scan --repo ./test-app --mode code-only --llm none ``` 要同时运行在线应用 (DAST) 扫描器,请先启动应用,然后扫描其 URL: ``` # 在一个 terminal 中:启动 vulnerable app cd test-app && npm install && npm run dev # serves on port 4000 # 在另一个 terminal 中,从 repo 根目录:full scan(SAST + DAST) isitsecure scan http://localhost:4000 --repo ./test-app --mode full ``` `--repo` 接受本地目录(原地扫描,包括未提交的更改)或远程 git URL,如 `https://github.com/you/your-app`。有关扫描生成的内容,请参见 `examples/sample-report.json`。 ## 基准测试 isitsecure 提供了一个可重复的基准测试工具,用于在公开的、故意设计漏洞的应用上评估**召回率**(在已知应用具有的漏洞类别中,我们发现了多少)和**误报**(在强化构建中绝对不能出现的发现)。 **测量的覆盖率——对扫描器能发现的内容保持现实态度。** 在 [OWASP Juice Shop](https://owasp.org/www-project-juice-shop/) —— 一个包含 100 多个挑战的故意设计的高难度基准测试 —— 上,isitsecure 在经过身份验证的扫描中检测到了 45 个可进行 DAST 检测的挑战类别的大约 **40%**(仅限 url-only 时为 36%),这是针对应用自身的 `/api/Challenges` 列表自动评分的。它在身份验证绕过、跨用户 BOLA/IDOR、注入和配置错误以及开放重定向方面表现出色;它在交互式客户端 XSS 和需要多步骤业务逻辑利用的挑战方面表现较弱。换句话说:它是一个扎实的自动化初步扫描,只需一条命令就能捕捉到整类真实的 bug —— **而不是**手动渗透测试的替代品。完整的按类别细分和方法论见 [benchmarks/RESULTS.md](benchmarks/RESULTS.md)。 ``` python benchmarks/run_benchmarks.py # VAmPI (vulnerable + secure builds) python benchmarks/run_benchmarks.py --all # + NodeGoat + crAPI (heavy) ``` 每次运行都会在 Docker 中启动目标、运行 DAST 扫描、根据已知的 ground truth 进行评分,然后将其拆除(需要 Docker)。测量结果记录在 [benchmarks/RESULTS.md](benchmarks/RESULTS.md) 中;有关目标和评分工作原理,请参见 [benchmarks/README.md](benchmarks/README.md)。 ## 隐私 - **基于规则的扫描完全在本地进行。** SAST 扫描器将您的代码库克隆到本地临时目录并在您的机器上进行分析 —— 除非您启用 LLM 审查,否则不会有任何代码离开您的计算机。 - **DAST 扫描器向您的目标 URL 发送 HTTP 请求。** 不会通过外部服务器代理任何内容- **LLM 审查将代码发送到您选择的 API 提供商**(Anthropic 或 Google)。准确地说:它发送**被基于规则的扫描器标记的文件的完整内容**(每个文件上限约为 50 KB)—— 而不是您的整个代码库,但对于大多数源文件来说,这就是整个文件,而不仅仅是一个片段。运行 `--llm none` 以将所有内容保留在本地。 - **OOB 回调**仅涉及您的扫描目标向回调服务器发出 DNS/HTTP 请求。您的代码永远不会发送到那里。 ## 架构 有关完整的 pipeline 设计,包括 SAST 如何馈送 DAST、如何确定 LLM 审查的优先级以及交叉引用如何工作,请参见 [docs/architecture.md](docs/architecture.md)。 ## 扫描器文档 有关每个扫描器的详细文档——它能检测什么、为什么重要、现实世界中的违规示例以及如何修复它发现的漏洞——请参见 [docs/scanners/](docs/scanners/)。 ## LSP 设置(可选,减少误报) 语言服务器让扫描器通过您的代码追踪身份验证流程(通过 go-to-definition)并抑制误报——确认身份验证 middleware 确实*已应用*,而不仅仅是被导入。 **让 isitsecure 为您安装它们:** ``` isitsecure setup --lsp # install/verify the Python, TypeScript, and Java language servers isitsecure setup --check # report what's installed (API key, DAST browser, LSP) — installs nothing ``` `setup --lsp` 会尽可能干净地安装它(Python 始终通过 pip;如果存在 Node,则 TypeScript 通过 npm;如果可用,则 Java 通过 Homebrew),并为它无法安装的任何内容打印指南。它也是完整 `isitsecure setup` 中的一个步骤。这是可选的 —— 没有它,扫描仍然可以使用基于 regex 的检测。有关手动设置和每种语言的详细信息,请参见 [docs/lsp-setup.md](docs/lsp-setup.md)。 ## 贡献 isitsecure 基于协议和策略模式构建。添加新的扫描器非常简单: 1. 实现 `DASTScannerProtocol` 或 `CodeScannerProtocol` 2. 将其添加到 `isitsecure/engine/factory.py` 的扫描器列表中 3. 在 `tests/` 下添加测试 使用 `pip install -e ".[all,dev]"` 设置开发环境,然后使用 `pytest` 运行测试套件。欢迎在 [github.com/jaurakunal/isitsecure](https://github.com/jaurakunal/isitsecure) 提出问题和拉取请求。 ## 许可证 Apache 2.0 —— 见 [LICENSE](LICENSE)。 ## 致谢 - ProjectDiscovery 的 [interactsh](https://github.com/projectdiscovery/interactsh) 提供 OOB 回调协议 - [Playwright](https://playwright.dev/) 用于认证爬虫和 DOM XSS 检测中的浏览器自动化
标签:CISA项目, 人工智能, 动态应用安全测试, 模块化设计, 特征检测, 用户模式Hook绕过, 自动化修复, 逆向工具, 错误基检测, 静态代码分析