Install
openclaw skills install @mowenqwq/web-security-test-rules通用网站安全测试(授权渗透测试)规则与检查清单。当用户要求对网站 / Web 应用做安全测试、漏洞扫描、渗透测试、安全评估,或提到安全测试规则、最小影响测试、隐蔽测试、漏洞复查、授权门禁时使用。核心强调:必须获得授权(默认开启授权门禁,主用非对称签名授权令牌验证 AUTHORIZATION.json + 公钥验签,其余为备选)、最小影响、测试后还原、规范报告、不破坏目标、禁止跳出授权范围(含外站关联尝试须授权,规则 23)。关键词:网站安全测试、授权渗透测试、安全规则、漏洞测试、安全评估、渗透测试规范、web 安全、最小影响、隐蔽测试、授权门禁、签名授权、授权验证、mowenfalse、mowenbrokentrue、mowenwaitrue、禁止越界、外站授权
openclaw skills install @mowenqwq/web-security-test-rules定位:一套通用、负责任、最小影响的网站 / Web 应用安全测试(授权渗透测试)规则与检查清单。 适用范围:任何已获得明确授权的目标。本规则不绑定任何具体站点、账号或密钥。 核心精神:在授权范围内尽可能全面地发现问题,同时绝不破坏目标、最小化痕迹、测完必还原、规范留痕。
🌐 多语言 / Localization:本文件是默认语言 中文(
zh-CN)。其他语言版本见locales/<语言代码>/(如英文locales/en/SKILL.md)。切换语言:设置环境变量MOWEN_LANG=en或在项目 / skill 目录放lang文件(内容en)后读取对应语言文件。结构说明见locales/README.md。
🔒 授权门禁(默认开启、可验证):加载本 skill 后、发起任何测试前,必须先验证授权(默认要求项目提供
AUTHORIZATION.json授权证据,校验目标白名单 + 有效期;无证据则要求一次性交互确认)。仅在项目显式放置mowenfalse标记时才可跳过验证(见「零、前置条件」)。对未授权目标一律禁止测试。
符合以下任一场景时加载本 skill:
任何测试动作开始前,必须先确认授权。没有授权,一切免谈。
门禁不是"嘴上说说"。默认走主路径:非对称签名授权令牌(最强防冒用)。其余机制(清单文件 / 交互确认 / mowenfalse)作为备选降级路径。任何路径不通过都阻断;对未授权目标一律禁止。
授权方用私钥对"授权声明"签名,项目放置带签名与公钥标识的 AUTHORIZATION.json;skill 在测试前用对应公钥验签。防冒用、防篡改最强。
AUTHORIZATION.json(模板见 references/authorization_template.json)含:
authorized_by / issued_at / valid_from / valid_until / targets[] / allowed_methods[] / scope_note / scope{} / key_id / noncescope{}:明确测试范围,含 in_scope[](显式目标 / 路径前缀)、internal_ranges[](内网 CIDR / 主机,如 10.0.0.0/8、http://10.0.0.5:8080)、include_internal(是否含内网)、out_of_scope[](显式排除项)、accounts[](授权测试账号)signed_payload:被签名的规范化字符串(由 scripts/sign_auth.sh 生成,验签时直接拿来验)signature:对 signed_payload 的 RSA-SHA256 签名(base64)放行前逐项校验:
| 校验项 | 做法 | 不通过时 |
|---|---|---|
| 公钥可信 | 按 key_id 在受信公钥目录(references/authorized_pubkeys/ 或 auth.pubkeys)找到对应公钥 | 阻断,未知 key_id |
| 验签通过 | openssl dgst -sha256 -verify <pub> -signature <sig> <(printf '%s' signed_payload) 须 Verified OK | 阻断,签名无效 / 被篡改 |
| 目标在授权范围内 | 本次目标满足以下任一:① 域名 ∈ targets(支持子域匹配);② 命中 scope.in_scope(含路径前缀);③ scope.include_internal=true 且主机 IP / 域名落在 scope.internal_ranges(支持 CIDR / 主机 / URL 匹配) | 阻断,越界目标 |
| 不在排除项 | 本次目标不命中 scope.out_of_scope(若填写) | 阻断,落在显式排除范围 |
| 时间窗有效 | 当前时间在 [valid_from, valid_until] 内 | 阻断,授权已过期 |
| 方法在许可内 | 本次方法 ∈ allowed_methods(若填写) | 阻断,越权方法 |
| 账号在许可内 | 使用账号 ∈ scope.accounts(若填写) | 阻断,未授权账号 |
| 破坏性操作授权 | 若动作属破坏性(DELETE / DROP / 覆盖写 / 批量修改 / 重置等),须 scope.destructive.allowed=true 且目标命中 scope.destructive.items;否则阻断 | 阻断,破坏性操作未显式授权 |
全部通过 → 放行,报告中记录"签名授权 / 授权人 / 有效期 / key_id / 范围摘要(含是否含内网)"。
内网测试:只要
scope.include_internal=true且目标落在scope.internal_ranges内,即视为已授权内网测试;未显式声明内网范围时,默认只允许外网授权域名,内网一律阻断。内网测试同样遵守最小影响、禁测项(A1)、数据最小化(A2)等全部规则。
生成密钥与签名见
scripts/sign_auth.sh;受信公钥管理见references/authorized_pubkeys/README.md。
不强制签名时,可仅用 AUTHORIZATION.json 的声明字段做白名单 + 有效期校验(不含验签)。仍比无证据强,但无法防冒用 / 篡改,仅作降级备选。
若项目未放授权清单,门禁不会静默放行,而是要求一次性交互确认:agent 展示即将测试的 target + 方法 + 拟测试时间窗,待用户显式输入确认短语(如 我确认已获授权)后才放行。确认仅本次会话有效、不持久化。
逃生口是"已知风险、主动关闭校验"的开关,不是授权本身。
mowenfalse:若项目已明确授权、希望跳过授权验证(仅用于非破坏性测试),在本项目该 skill 目录创建 auth.disable,内容写入 mowenfalse(或设环境变量 MOWEN_AUTH_OVERRIDE=mowenfalse)。检测到即跳过授权验证;仍须遵守范围约束(不得跳出授权范围,见规则 23)。mowenbrokentrue:破坏性操作(规则 22)默认须显式授权 + 先备份。auth.disable 写入 mowenbrokentrue(或环境变量 MOWEN_AUTH_OVERRIDE=mowenbrokentrue)可跳过破坏性操作的显式授权要求(不用 scope.destructive.allowed=true 也能放行破坏性动作)。注意:mowenbrokentrue 只能跳过授权、不能跳过备份——无论是否开启,破坏性动作执行前都必须先做可恢复备份(见规则 22、A5),备份不得豁免。注意:mowenbrokentrue 不等同于 mowenfalse——它不关闭授权验证;若同时想关闭授权验证,需另置 mowenfalse(两者可并存于文件,一行一个)。mowenbrokentrue,必须先备份(备份不可跳过),仍受范围约束(见规则 22、规则 23)。将主路径与备选叠加:签名令牌 + 清单白名单 + 文件 SHA256 完整性 + 随仓库提交审计(A3)。最严格、可审计,但配置与维护成本最高,按团队需要启用。
references/auth_notes.md)。测试必须获得明确授权;不破坏目标系统本身;禁止对未授权目标测试。
仅使用授权方指定的测试账号;不冒用、不测试他人真实账号;记录所用账号标识。
在授权与最小影响前提下,各类测试手法(注入、XSS、越权、逻辑漏洞等)均可使用。
允许按需引入新工具或 skill,但引入后需先做安全与行为检测(确认无恶意、无破坏性脚本再使用)。
每次测试后记录并还原所有改动(数据、配置、文件)。
无法还原的改动必须标记并明确告知授权方。
每次修改后,用"无认证 / 无特权"的裸请求验证是否真实生效(排除缓存与前端假象)。
7 天内相同问题不重复反馈(先看历史报告,见规则 14)。
只报告新问题;文件名带时间;保存到约定的报告目录(见规则 13)。
先验证密钥(API Key / Token)可用性:可用则保留,不可用则替换或提示授权方。
测试前先记录目标数据的原始值,测试后对比确认是否真有变化。
测试必须最小化痕迹:
reports/security/,可被项目配置 report.path / report_dir 或调用参数覆盖,见规则 20)YYYY-MM-DD_findings.md同一目标 7 天内不重复已用攻击向量:
每次测试前比对前端 JS 资源名;若变更,则提取新 chunk 分析其中暴露的新端点。
每次测试重新验证已知端点的认证状态是否变化(需认证 → 无需认证 = 认证回退,必须报告)。
涉及头像 / 封面 / 附件等用户资源的上传测试,先获取原值保存,测完恢复;无恢复机制的控制调用量 ≤ 3 次。
无认证即可写入数据的端点,测试调用 ≤ 3 次,只写无害数据,并在报告中记录。
reports/security/)。配置优先级:命令行 / 调用参数指定 > 项目内 report.path 配置 > 默认 reports/security/<目标名>/。AUTHORIZATION.json 或项目配置里的 report_dir 也可作为来源。自定义位置必须是授权方可控的存储(不落第三方公开位置)。AUTHORIZATION.json)须通过 scope 字段显式声明测试范围——in_scope(目标 / 路径前缀)、out_of_scope(排除项)、accounts(授权账号)。范围模糊或缺失时,门禁应要求补充,不默认放行。scope.include_internal=true 且其落在 scope.internal_ranges 内时才允许测试;未声明内网范围则只允许外网授权域名,内网一律阻断。AUTHORIZATION.json 的 scope.destructive.allowed=true 且其逐项列出本次目标(命中 scope.destructive.items)时才允许,不能靠笼统授权蒙混过关。scope.destructive.backup_required=true(默认)时未备份不得执行。注意:此备份要求不受 mowenbrokentrue 影响——mowenbrokentrue 只跳过破坏性显式授权,绝不豁免备份,未备份一律不得执行。references/backup_notes.md。mowenbrokentrue:若 auth.disable 含 mowenbrokentrue(或环境变量 MOWEN_AUTH_OVERRIDE=mowenbrokentrue),可跳过本规则的"显式授权 + 先备份"强制要求(破坏性测试一键通)。注意:① 仅关闭破坏性格闸,不关闭授权验证(mowenfalse 另管);② 仍须遵守范围约束(规则 23,不跳出授权范围);③ 报告中标注"破坏性门禁已关闭(mowenbrokentrue)",并重申强烈建议先备份。targets / scope.in_scope / 内网 internal_ranges,不得向授权范围外主动发起测试请求(见规则 96、门禁校验)。auth.disable 放置 mowenwaitrue(或环境变量 MOWEN_AUTH_OVERRIDE=mowenwaitrue)显式确认"已具备 / 已等待对应外站授权"后方可尝试。未获该外站授权且未置 mowenwaitrue 的外站关联尝试一律禁止。mowenfalse 关闭验证),仍须逐目标确认在授权范围内,否则禁止(见门禁校验与本条)。文件.png/x.php(pathinfo 解析)、直接改 .php 后缀访问——执行面为零时维持"材料入库"级(MEDIUM~LOW),有执行面升 HIGH。修复建议:服务端重编码(GD/Imagick 重画图像、ffmpeg 转码音频)可连带清除注入内容。edit 类端点字段校验先于归属校验时,缺字段返回 400,无法无害确认归属检查是否存在——用只读旁证(detail-for-edit 类 403)佐证,edit 本体标"待确认"建议目标方代码自查;绝不通过"补全字段试探他人资源"来验证(有改坏他人数据风险)。原则:"验证完整性"永远让位于"不破坏他人数据"。详见 references/auth_notes.md。要点:
token,B 端点用 captcha_token,务必区分)。YYYY-MM-DD HH:MM:SS(秒级,便于同一天内多条记录排序与追溯)。errors/)新建记录文件。YYYY-MM-DD_简短描述.md。报告至少包含:
| 字段 | 说明 |
|---|---|
| 测试时间 | 带当前时间戳,精确到秒(规则 4) |
| 目标 | 域名 / 端点范围 |
| 操作日志 | 每次测试动作的逐条记录:时间 / 端点 / 方法 / 请求摘要 / 响应结果 / 副作用(规则 20,强制) |
| 漏洞详情 | 编号 + 名称 + 等级 + 描述 + PoC + 修复建议 |
| 后续方向 | 下次可尝试的新方法(供规则 14 使用) |
reports/security/<目标名>/,可通过项目配置 report.path / report_dir 或调用参数覆盖(见规则 20)。文件名仍为 YYYY-MM-DD_findings.md,同目标同日追加到同一文件。references/report_template.md,其中已包含「操作日志」与「报告位置配置」段。漏洞等级建议(可调整):
| 等级 | 含义 |
|---|---|
| 严重 / Critical | 可直接接管、拖库、远程代码执行 |
| 高危 / High | 越权读写、敏感信息泄露 |
| 中危 / Medium | 需配合条件的利用、部分防护绕过 |
| 低危 / Low | 信息泄露、配置瑕疵 |
| 信息 / Info | 加固建议、非漏洞 |
scope.destructive.allowed=true 且目标逐项列出,否则禁止(A5、规则 22)report.path / report_dir,规则 20)YYYY-MM-DD_findings.md 并追加,「操作日志」完整(规则 13、20)🔒 标记 = 与"授权 / 合规边界"直接相关,测试前必须向授权方确认范围。
scope.destructive.allowed=true 且逐项列出目标,执行前必须对相关资源做可恢复备份并写报告,且提前向授权方标注不可逆风险(详见规则 22、参考文献 references/backup_notes.md)。在核心 19 条 + 扩展 12 条之外,补充以下常见专项。均受"授权 / 最小影响 / 隐蔽"约束。
169.254.169.254)、DNS rebinding、协议穿透(gopher / file);仅探测,不读取大量敏感数据。SSRF PoC 不得指向授权范围外的外部第三方系统——不得借目标服务器作为攻击跳板去打站外 / 真实内网第三方。.git / .env / 备份暴露、Swagger / Docs 未授权、详细报错 / 堆栈、目录列举。仅记录名称;工具落地前仍须遵守本 skill 全部规则与授权门禁。优先"下载后在本地分析 / 被动扫描"类工具,避免对目标直接发起破坏性请求。
browser-automation —— 浏览器自动化(查看 / 截图 / 表单),被动为主。playwright-cli —— 浏览器自动化(更强交互 / 网络 mock)。github-connector —— 仅用于克隆 / 扫描自有或已授权仓库(含 Token 安全规范,禁止打印凭据)。README.md —— 项目说明、安装、用法、授权门禁(三级开关速查)、规则索引与开源相关(详细门禁与规则见正文)references/report_template.md —— 完整报告模板(含时间戳、漏洞字段、后续方向)references/auth_notes.md —— 通用认证 / 凭据管理 / 登录流程说明references/authorization_template.json —— 授权证据文件模板(目标白名单 + 有效期 + 签名令牌字段 + scope.destructive)references/backup_notes.md —— 破坏性操作备份流程、提前警告与备份记录模板(规则 22、A5)references/authorized_pubkeys/README.md —— 受信公钥管理说明scripts/sign_auth.sh —— 授权声明非对称签名工具(RSA-SHA256)