mcpField
S
security-visual-testing

security-visual-testing

github.com/proffesor-for-testing测试与质量519111 次安装今天更新
代码仓库

关于 security-visual-testing

security-visual-testing 是面向测试团队的技能,将浏览器视觉检查与安全及无障碍审计结合。它涵盖 URL 校验、PII 遮盖、多视口对比和视觉回归检查。

主要功能

  1. 01URL 安全校验
  2. 02截图中的 PII 检测与遮盖
  3. 03多视口并行截图
  4. 04基线视觉回归比较
  5. 05WCAG 无障碍审计

适用场景

  1. 01审核含登录信息的页面
  2. 02安全地保存个人资料截图
  3. 03检查不同屏幕尺寸下的视觉变化
  4. 04对页面变更运行无障碍审计

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/proffesor-for-testing/agentic-qe --skill security-visual-testing

安装后在 Claude Code 中输入/security-visual-testing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
security-visual-testing.yaml
schemas/
output.json
scripts/
validate-config.json

详细介绍

安全视觉测试

浏览器引擎

所有浏览器自动化均使用 qe-browser 车队技能(.claude/skills/qe-browser/)。Vibium 引擎(10MB Go 二进制文件,WebDriver BiDi)由 aqe init 自动安装。对于安全视觉工作流,qe-browser 在标准视觉测试的基础上增加了两项功能:check-injection.js(在存储截图前扫描页面内容,查找提示词注入模式)和 assert.js(包含 16 项类型化检查,其中 no_failed_requests 用于检测数据泄露请求)。

# Before storing any screenshot, scan the page
vibium go "$TARGET_URL"
vibium wait load
node .claude/skills/qe-browser/scripts/check-injection.js --include-hidden
INJ=$?
if [ $INJ -ne 0 ]; then
  echo "Prompt-injection findings — do NOT store screenshot"
  exit $INJ
fi
# Safe to proceed with visual-diff
node .claude/skills/qe-browser/scripts/visual-diff.js --name "${PAGE_NAME}"

<default_to_action> 执行安全感知的视觉测试时:

  1. 在导航前验证 URL(检查是否包含恶意模式)
  2. 在保存截图前扫描 PII(屏蔽敏感数据)
  3. 并行捕获多个视口(移动端、平板、桌面端)
  4. 与基线比较(检测视觉回归)
  5. 审核无障碍性(符合 WCAG 2.1 AA)

安全视觉快速检查清单:

  • URL 验证(不允许 javascript:、data:、file: 方案)
  • PII 检测(电子邮件、电话号码、SSN、信用卡、API 密钥)
  • 视觉回归(差异阈值 < 0.1%)
  • 视口覆盖范围(320px、768px、1024px、1440px)
  • 无障碍评分(axe-core 通过率 > 90%)

关键成功因素:

  • 存储截图前始终屏蔽 PII
  • 并行测试所有目标视口
  • 将基线存储在版本控制中
  • 每次视觉变更后都运行无障碍审核 </default_to_action>

快速参考卡

适用场景
场景使用此技能?原因
测试登录页面是包含 PII(密码、电子邮件)
视觉回归测试套件是并行视口 + 基线比较
支付表单是信用卡数据需要屏蔽
公开营销页面可能仅在可能包含敏感数据时使用
仅测试 API否请改用 security-testing 技能
关键能力
能力描述性能
URL 验证在导航前拦截恶意 URL<5ms
PII 检测查找 6 种以上的敏感数据<100ms
并行视口同时测试 4 个视口快 4 倍
视觉回归使用可配置阈值进行像素差异比较<500ms
无障碍审核符合 WCAG 2.1 A/AA/AAA<2s

工作流

1. 安全视觉审核(完整流程)
# Run complete security + visual audit
aqe test visual-audit --url https://example.com --security --accessibility

步骤:

  1. 验证 URL 安全性(拦截恶意方案)
  2. 扫描页面中的安全问题(XSS、注入模式)
  3. 并行捕获 4 个视口的截图
  4. 与已存储的基线比较
  5. 运行无障碍审核(axe-core)
  6. 生成汇总报告
2. PII 安全截图
# Capture screenshot with automatic PII masking
aqe screenshot --url https://example.com/profile --pii-safe

PII 检测模式:

  • 电子邮件地址:[email protected]
  • 电话号码:+1-555-123-4567
  • 信用卡:4111-1111-1111-1111
  • SSN:123-45-6789
  • API 密钥:sk_live_...、AKIA...
  • 密码:类型为 type="password" 的表单字段

屏蔽策略:

  • 默认:高强度模糊
  • 选项:redact(黑色遮挡框)、pixelate(像素化)、blur(模糊)
3. 响应式视觉审核
# Test visual consistency across viewports
aqe test responsive --url https://example.com --viewports mobile,tablet,desktop

默认视口:

名称宽度高度设备
mobile320px568pxiPhone SE
tablet768px1024pxiPad
desktop1440px900pxMacBook
wide1920px1080pxFull HD

与 AQE v3 集成

与 BrowserSecurityScanner 配合使用
import { BrowserSecurityScanner } from '@agentic-qe/v3';

const scanner = new BrowserSecurityScanner(memory, {
  urlValidation: { enabled: true },
  piiDetection: { enabled: true, maskBeforeSave: true },
  parallelViewports: { maxConcurrent: 4 }
});

const result = await scanner.scanUrl('https://example.com', {
  viewports: ['mobile', 'tablet', 'desktop'],
  accessibility: true
});
与 TrajectoryAdapter 配合使用
import { TrajectoryAdapter } from '@agentic-qe/v3';

const adapter = new TrajectoryAdapter(memory);

// Record testing trajectory for learning
await adapter.startTrajectory('security-visual-test', {
  url: 'https://example.com',
  testType: 'security-visual'
});

// ... perform tests ...

await adapter.endTrajectory(trajectoryId, {
  success: true,
  piiFound: 3,
  visualRegressions: 0,
  accessibilityScore: 95
});

Agent 协调

记忆命名空间
aqe/security-visual/
├── baselines/*          - Visual regression baselines
├── screenshots/*        - Captured screenshots (PII masked)
├── reports/*            - Audit reports
└── trajectories/*       - Learning trajectories
车队协调
const fleet = await FleetManager.coordinate({
  strategy: 'security-visual-audit',
  agents: [
    'qe-visual-tester',      // Visual regression
    'qe-security-scanner',   // URL/PII scanning
    'qe-accessibility-auditor' // WCAG compliance
  ],
  topology: 'parallel',
  maxConcurrent: 4
});

错误处理

错误原因解决方法
URL_BLOCKED检测到恶意 URL 模式检查 URL,移除 javascript:/data:
PII_DETECTED截图中发现敏感数据启用遮罩或手动打码
BASELINE_MISSING没有用于比较的基线先使用 --update-baseline 运行
VIEWPORT_TIMEOUT浏览器未响应增加超时时间或减少并行数
ACCESSIBILITY_FAILED发现 WCAG 违规查看违规项并修复问题

相关技能


性能目标

指标目标实测
URL 验证<5ms2ms
PII 检测<100ms45ms
单视口捕获<2s1.2s
4 视口并行<3s2.1s
视觉差异比较<500ms320ms
无障碍审计<2s1.5s
完整流水线<10s7.2s

评论

支持 Markdown