web端安全扫描

SKILL运维和基础设施
运维和基础设施 未标注权限 许可证不明确
安装这个技能

Use when user provides a URL and asks about web security, vulnerabilities, penetration testing, code audit, XSS, CSRF, security headers, SSL/TLS configuration, hardcoded secrets, or front-end security scanning. Also use when user asks to check whether a website/page is safe, has backdoors, leaks user data, or can be attacked.

一句话选型结论

按资料字段整理

web端安全扫描是运维和基础设施类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类运维和基础设施 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_4a86686d/web-sast
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

运维和基础设施
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_4a86686d仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791664434
正文体量17.0 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
查服务与日志

按现象定位服务状态与日志线索。

写部署与巡检脚本

把重复的部署、巡检写成脚本。

故障排查

按步骤排查网络、依赖与配置。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在运维和基础设施场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
web端安全扫描当前 未标注权限 未标注 未标注 未标注 有
Azure 部署 调用外部服务 GitHub 仓库 664.2 万 Codex、Claude、Cursor 有
Azure diagnostics 问题管理 调用外部服务 GitHub 仓库 657.6 万 Codex、Claude、Cursor 有
Azure aigateway 部署 调用外部服务 GitHub 仓库 655.3 万 Codex、Claude、Cursor 有
Azure AI 搜索 调用外部服务 GitHub 仓库 651.4 万 Codex、Claude、Cursor 有
Azure Cloud migrate 部署 调用外部服务 GitHub 仓库 650.7 万 Codex、Claude、Cursor 有

SKILL.md 全文

17.0 KB
模型实际读到的说明书原文,来自技能仓库

Web SAST

Web 前端静态安全扫描。输入一个 URL,自动执行 4 阶段扫描(HTTP头/SSL → 源码提取 → 漏洞模式匹配 → 分级报告),输出含修复建议的结构化安全审计报告(HTML 格式,浏览器打印即可导出 PDF)。

核心能力

用户给 URL → 我来扫 → 出报告(Critical / High / Medium / Low)

能做什么:
- 扫描任何可通过 HTTP 访问的 Web 页面(H5、SPA、传统站点)
- 检测前端 JS 源码中的安全漏洞模式
- 分析 HTTP 安全响应头和 SSL/TLS 配置
- 识别硬编码密钥、客户端验证码生成、PII 泄露等常见问题
- 输出分级报告 + 每个漏洞的修复代码示例

不能做什么:
- ❌ 不做后端渗透测试(SQL注入需交互式探测,静态扫描无法完成)
- ❌ 不做 DDoS / 网络层测试
- ❌ 不扫描需要登录才能访问的页面(除非用户提供认证信息)
- ❌ 不替代 OWASP ZAP / Burp Suite 等专业安全工具
- ❌ 不对目标发起任何攻击性行为(只读分析,零副作用)

触发条件

以下任一场景触发本 Skill:

用户说的话 触发
"这个页面安全吗" / "有漏洞吗" ✅
"帮我审计/扫描一下这个网站" ✅
"检查 XSS / CSRF / 安全头" ✅
"有没有后门 / 密钥泄露" ✅
"等保测评 / 安全合规检查" ✅
"帮我写一个安全检测报告" ✅
"这个 URL 能打开,看看代码" ✅

不触发的场景:
- 用户只问概念性问题("什么是XSS")→ 用解释/教学方式回答即可,不需要加载本 Skill
- 用户要求修改/修复代码 → 本 Skill 只负责发现,修复用其他 Skill 或直接编码
- 用户提供的不是 URL(如本地文件路径)→ 需要调整策略

工作流程

Phase 1: 表面扫描(约 10 秒)

抓取 HTTP 响应头和 SSL 证书信息。

# 获取响应头
curl -sI -L -A "Mozilla/5.0" "$URL"

# 检查 SSL 证书
echo | openssl s_client -connect $DOMAIN:443 -servername $DOMAIN 2>/dev/null | openssl x509 -noout -dates -subject -issuer

检查项清单:

安全头 期望值 缺失时严重度
Content-Security-Policy 存在且非空 Medium
Strict-Transport-Security max-age ≥ 31536000 Medium
X-Frame-Options DENY / SAMEORIGIN Low
X-Content-Type-Options nosniff Low
Referrer-Policy 存在 Low
Set-Cookie 的 HttpOnly/Secure/SameSite 全部具备 High

SSL 证书检查:
- 是否过期?(当前日期 vs notAfter)
- 颁发机构是否为知名 CA?
- SAN 是否包含目标域名?

Phase 2: 源码提取(约 15 秒)

下载 HTML 页面并提取所有外部 JS/CSS 资源。

# 下载完整 HTML
curl -sL -A "Mozilla/5.0" "$URL" > page.html

# 提取所有 JS 引用
grep -oE 'src="([^"]+\.js[^"]*)"' page.html | sed 's/src="//;s/"$//' > js_urls.txt

# 提取所有 CSS 引用
grep -oE 'href="([^"]+\.css[^"]*)"' page.html | sed 's/href="//;s/"$//' > css_urls.txt

# 下载每个 JS 文件到 js/ 目录
while read js_path; do
  # 处理相对路径/绝对路径/完整URL
  curl -sL "$full_url" -o "js/$(basename $js_path)"
done < js_urls.txt

Phase 3: 深度扫描(核心)

使用 references/rules.md 中的检测规则对所有 JS 文件进行模式匹配。

扫描矩阵:

编号 检测项 严重度 grep 模式
CRIT-01 硬编码密钥/万能密码 Critical password/api_key/secret/token = "..."
CRIT-02 Math.random 用于安全场景 Critical Math.random()
CRIT-03 客户端验证码生成 Critical 验证码 + Math.random
CRIT-04 PII 在 URL 参数中传输 Critical phone/idcard/userName in URL
CRIT-05 所有安全头缺失 Critical headers 全空
HIGH-01 eval() / new Function() High eval(/new Function
HIGH-02 innerHTML 赋值 High innerHTML =
HIGH-03 表单无 CSRF Token High form 无 csrf
HIGH-04 console.log 敏感数据 High console.log(token/phone...)
HIGH-05 Server 版本暴露 High Server: Apache/xxx
HIGH-06 敏感页面的第三方追踪器 High 百度统计/GA on PII pages
MED-01 document.write() Medium document.write(
MED-02 缺失单个安全头 Medium 单个 header 缺失
MED-03 表单字段无校验属性 Medium input 无 pattern/maxlength
MED-04 敏感页面可缓存 Medium form 页无 Cache-Control: no-store
LOW-01 过期库版本 Low jQuery < 3.x 等
LOW-02 含敏感信息的注释 Low TODO/FIXME + password

Phase 4: 报告生成(HTML → 浏览器打印导出 PDF)

扫描完成后,生成一份结构化 HTML 安全审计报告。报告使用 print-friendly CSS(@page { size: A4; } + @media print),用户可通过浏览器 Ctrl+P / Cmd+P →「另存为 PDF」一键导出为 PDF 文件。

报告固定包含九大章节(按顺序):

章节 标题 内容
一 执行摘要 四色统计卡片(Critical/High/Medium/Low 数量)+ 总体评级
二 目标信息 URL、扫描时间、页面功能、技术栈、服务器信息
三 扫描流程回顾 Phase 1→4 每步通过/受限状态 + 简要说明
四 HTTP 安全头与 SSL 安全头状态表(含当前值/建议)+ SSL 证书信息
五 漏洞详细分析 按严重度分组(CRIT→HIGH→MED→LOW),每条含代码片段+风险说明+修复方案
六 修复优先级与等保影响 优先级排序表(P0/P1/P2)+ 预计工时 + 等保维度映射
七 与专业工具对比 Web SAST vs OWASP ZAP vs Burp Suite 对比表
八 建议与后续行动 编号建议表,每条带优先级标签
九 审计局限性声明 声明基于的方法、不覆盖的范围、误报可能性

报告 HTML 必须包含以下 CSS 打印样式:

@page { size: A4; margin: 20mm; }
@media print { body { padding: 20px; } }

交付物:.html 文件保存到 artifacts 目录,文件名格式:web-sast-report-{sanitized_url}.html。用户可通过浏览器打开后打印为 PDF。

报告示例参考:见 mini-program-sast 的报告模板 — 相同的十大章节结构、统计卡片、风险评级表、发现标注(正面/信息/警告)、对比分析和建议表。后续所有报告以此为模板。Web SAST 删除小程序特有的包体分析章节,增加 HTTP 安全头与 SSL 独立章节。

> ⚠️ 重要:报告中不得包含任何真实网站的域名、API 端点、密钥等可追溯到具体业务的数据。所有示例信息必须脱敏。

报告 HTML 模板

以下为生成报告时的 HTML 骨架。每份报告按此模板填入实际数据:

&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;zh-CN&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;Web 安全审计报告 — {TARGET_HOST}&lt;/title&gt;
&lt;style&gt;
  @page { size: A4; margin: 20mm; }
  * { margin: 0; padding: 0; box-sizing: border-box; }
  body { font-family: -apple-system, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; color: #1a1a2e; line-height: 1.7; padding: 40px 50px; max-width: 800px; margin: 0 auto; font-size: 13px; }
  .cover { text-align: center; padding: 60px 0; border-bottom: 3px solid #2563eb; margin-bottom: 40px; }
  .cover h1 { font-size: 28px; color: #1e3a5f; margin-bottom: 8px; }
  .cover .subtitle { font-size: 16px; color: #64748b; margin-bottom: 30px; }
  .cover .meta { font-size: 12px; color: #94a3b8; }
  .cover .badge { display: inline-block; padding: 6px 24px; border-radius: 20px; font-weight: 700; font-size: 14px; margin-top: 20px; }
  .badge-critical { background: #fee2e2; color: #991b1b; border: 2px solid #ef4444; }
  .badge-clean { background: #dcfce7; color: #166534; border: 2px solid #16a34a; }
  .badge-limited { background: #fef3c7; color: #92400e; border: 2px solid #f59e0b; }

  h2 { font-size: 18px; color: #1e3a5f; border-bottom: 2px solid #e2e8f0; padding-bottom: 6px; margin: 30px 0 16px; }
  h3 { font-size: 14px; color: #334155; margin: 20px 0 10px; }

  .summary-grid { display: flex; gap: 20px; margin: 20px 0; }
  .summary-card { flex: 1; background: #f8fafc; border-radius: 10px; padding: 16px; border: 1px solid #e2e8f0; text-align: center; }
  .summary-card .num { font-size: 32px; font-weight: 800; }
  .summary-card .label { font-size: 11px; color: #64748b; margin-top: 4px; }

  table { width: 100%; border-collapse: collapse; margin: 14px 0; font-size: 12px; }
  th { background: #1e3a5f; color: #fff; padding: 10px 12px; text-align: left; }
  td { padding: 8px 12px; border-bottom: 1px solid #e2e8f0; }
  tr:nth-child(even) td { background: #f8fafc; }

  .finding { margin: 16px 0; padding: 16px; border-left: 4px solid; border-radius: 0 8px 8px 0; background: #f8fafc; }
  .finding-critical { border-color: #ef4444; }
  .finding-high { border-color: #f97316; }
  .finding-medium { border-color: #eab308; }
  .finding-low { border-color: #2563eb; }
  .finding-positive { border-color: #16a34a; }

  .tag { display: inline-block; padding: 2px 10px; border-radius: 12px; font-size: 11px; font-weight: 600; }
  .tag-red { background: #fee2e2; color: #991b1b; }
  .tag-orange { background: #fff7ed; color: #9a3412; }
  .tag-yellow { background: #fef3c7; color: #92400e; }
  .tag-blue { background: #dbeafe; color: #1e40af; }
  .tag-green { background: #dcfce7; color: #166534; }

  .phase { margin: 10px 0; padding: 10px 16px; background: #f0f9ff; border-radius: 8px; border: 1px solid #bfdbfe; }
  .phase .phase-title { font-weight: 700; color: #1e40af; }

  pre { background: #1e293b; color: #e2e8f0; padding: 14px; border-radius: 8px; overflow-x: auto; font-size: 11px; margin: 8px 0; }
  code { font-family: &quot;SF Mono&quot;, &quot;Fira Code&quot;, monospace; }

  .footer { margin-top: 50px; padding-top: 20px; border-top: 1px solid #e2e8f0; font-size: 11px; color: #94a3b8; text-align: center; }

  @media print { body { padding: 20px; } }
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;cover&quot;&gt;
  &lt;h1&gt;🛡️ Web 安全审计报告&lt;/h1&gt;
  &lt;div class=&quot;subtitle&quot;&gt;Web Front-End Static Security Audit (SAST)&lt;/div&gt;
  &lt;div class=&quot;meta&quot;&gt;审计日期:{scan_time}&lt;br&gt;审计工具:web-sast v1.0&lt;/div&gt;
  &lt;div class=&quot;badge badge-{overall_level}&quot;&gt;{overall_badge_text}&lt;/div&gt;
&lt;/div&gt;

&lt;!-- 章节一:执行摘要 --&gt;
&lt;h2&gt;一、执行摘要&lt;/h2&gt;
&lt;div class=&quot;summary-grid&quot;&gt;...&lt;/div&gt;

&lt;!-- 章节二:目标信息 --&gt;
&lt;h2&gt;二、目标信息&lt;/h2&gt;
&lt;table&gt;...&lt;/table&gt;

&lt;!-- 章节三:扫描流程回顾 --&gt;
&lt;h2&gt;三、扫描流程回顾&lt;/h2&gt;
&lt;div class=&quot;phase&quot;&gt;...&lt;/div&gt;

&lt;!-- 章节四:HTTP 安全头与 SSL --&gt;
&lt;h2&gt;四、HTTP 安全头与 SSL&lt;/h2&gt;
&lt;table&gt;...&lt;/table&gt;

&lt;!-- 章节五:漏洞详细分析 --&gt;
&lt;h2&gt;五、漏洞详细分析&lt;/h2&gt;
&lt;div class=&quot;finding finding-critical&quot;&gt;...&lt;/div&gt;

&lt;!-- 章节六:修复优先级与等保影响 --&gt;
&lt;h2&gt;六、修复优先级与等保影响&lt;/h2&gt;
&lt;table&gt;...&lt;/table&gt;

&lt;!-- 章节七:与专业工具对比 --&gt;
&lt;h2&gt;七、与专业工具对比&lt;/h2&gt;
&lt;table&gt;...&lt;/table&gt;

&lt;!-- 章节八:建议与后续行动 --&gt;
&lt;h2&gt;八、建议与后续行动&lt;/h2&gt;
&lt;table&gt;...&lt;/table&gt;

&lt;!-- 章节九:审计局限性声明 --&gt;
&lt;h2&gt;九、审计局限性声明&lt;/h2&gt;
&lt;p&gt;...&lt;/p&gt;

&lt;div class=&quot;footer&quot;&gt;
  &lt;p&gt;web-sast v1.0 · Web 前端静态安全扫描&lt;/p&gt;
  &lt;p&gt;报告生成时间:{scan_time} · 审计对象:{target_url}&lt;/p&gt;
  &lt;p style=&quot;color:#94a3b8;&quot;&gt;本报告不含任何真实案例数据,所有示例信息均已脱敏处理&lt;/p&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;

异常处理指南

扫描过程中可能遇到的问题及解决方案:

常见异常

错误现象 原因 解决方法
curl 返回 403 Forbidden / WAF 拦截 目标站有防火墙,识别到了自动化请求 添加 -A &quot;Mozilla/5.0 ...&quot; 浏览器 UA 重试;如果仍失败,告知用户这是 WAF 保护正常行为
curl 返回 429 Too Many Requests 触发了速率限制 等待 60 秒后重试;降低请求频率;先只下载 HTML 不下载子资源
curl 连接超时 DNS 解析失败或目标不可达 先 ping 域名确认可达性;检查是否需要 VPN/代理
HTML 是 SPA 但 JS Bundle 加载失败 JS 文件名带 hash 且 HTML 动态渲染 尝试用浏览器 UA 获取;提取 &lt;script src&gt; 中的实际 URL;必要时告知用户该 SPA 需要运行时渲染,静态扫描有限制
openssl 报错 目标不支持 HTTPS 或证书链有问题 检查是否为 HTTP(非 HTTPS);记录证书错误信息作为发现点
JS 文件过大(>2MB)导致 grep 慢 单文件打包了所有依赖 使用 strings 命令提取可读部分;限制搜索范围;告知用户大型 SPA 的扫描耗时较长
目标需要登录才能看到内容 页面重定向到登录页 告知用户当前只能扫描公开页面;如果需要扫描登录后页面,请提供 Cookie 或 Token
检测结果全为"未发现问题" 可能是:①目标确实很安全;②JS 是混淆/压缩过的,模式没匹配上 明确告知用户两种可能性,建议结合专业工具(OWASP ZAP/Burp Suite)二次验证

降级策略

当某个阶段无法完成时的降级方案:

  1. Phase 1 无法获取响应头(WAF 完全拦截)→ 跳过头部分析,直接进入 Phase 2(如果能拿到 HTML)或提示用户提供页面源码
  2. Phase 2 无法下载子资源(JS 文件 403)→ 仅对 HTML 内联脚本进行分析,标注「外部 JS 未下载,分析范围受限」
  3. Phase 3 匹配结果为零→ 不要说「没有漏洞」,要说「基于静态规则未发现已知模式,但不代表绝对安全」,并列出扫描了哪些规则

与专业工具对比

维度 Web SAST(本Skill) OWASP ZAP Burp Suite Professional
类型 AI驱动的静态分析 自动化DAST+代理 交互式DAST+代理
速度 30秒~2分钟 5-30分钟 手动操作,无上限
需要安装 不需要(curl + grep) 需要Java环境 需要Java环境+付费许可证
检测深度 源码模式匹配 主动探测+被动爬取 完整渗透测试套件
擅长领域 快速初筛、代码级问题发现 自动化漏洞扫描 专业安全审计
误报率 中(纯模式匹配) 低(有状态验证) 很低(人工判断)
适用场景 开发阶段自查、快速评估 CI/CD集成安全门禁 合规测评、红队演练

推荐组合使用:先用 Web SAST 做 2 分钟快速初筛 → 发现问题后再用 ZAP 做深度验证 → 最终由安全专家用 Burp 做手工复核。

FAQ

Q: 扫描结果准确吗?会不会有误报?
A: 本 Skill 基于模式匹配(grep),存在一定的误报率。例如 innerHTML 在 React/Vue 的虚拟DOM中可能是安全的用法。每条发现我都会标注上下文,你需要结合业务逻辑判断是否真的构成风险。

Q: 能扫描小程序吗?
A: 不能直接通过 URL 扫描小程序页面。但如果你有 .wxapkg 包文件或解包后的源码,可以对本地文件执行相同的模式匹配规则。参见「能力边界」中的说明。

Q: 扫描会对目标网站造成影响吗?
A: 不会。本 Skill 只执行 curl GET 请求读取公开页面,等同于你在浏览器中访问该页面。不会提交任何表单、不会发送任何数据、不会触发任何写入操作。

Q: 为什么有些大厂网站(如DeepSeek Chat)扫描结果很少?
A: 大型产品通常有完善的安全工程实践:代码混淆压缩(让模式匹配失效)、WAF防护(拦截自动化请求)、CSRFFull架构(无传统XSS面)、CSP严格配置等。扫描结果少不代表绝对安全,只是表面防御做得好。

Q: 发现漏洞后怎么修?
A: 每条漏洞发现都会附带具体的修复代码示例(前后端都有)。如果需要完整的整改方案或等保合规咨询,可以基于扫描结果进一步讨论。

文件结构

web-sast/
├── SKILL.md                          ← 你正在读的主文档(流程+示例+FAQ)
├── references/
│   ├── rules.md                      ← 15条检测规则的完整 grep 模式库
│   ├── audit.sh                      ← 一键运行的 bash 自动化脚本
│   └── international-standards.md    ← agentSkills.io 国际规范论述

首次使用:读 SKILL.md 了解流程 → 给我一个 URL → 我按 4 个阶段执行扫描 → 输出 HTML 格式安全审计报告(浏览器打印即可导出 PDF)
日常使用:直接给我 URL + 说一句"扫描一下",我会自动加载本 Skill 并执行
进阶使用:运行 bash references/audit.sh &lt;URL&gt; 在本地终端执行自动化扫描(输出原始日志到 audit_目录)

常见问题

5 问
答案由本站依据条目字段整理
web端安全扫描怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_4a86686d/web-sast。安装方式为未标注。装完刷新技能列表或重开客户端。

web端安全扫描支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

web端安全扫描权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

web端安全扫描收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

web端安全扫描用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。