关于 security-testing
面向工程师和审计人员的安全测试技能,按 OWASP 漏洞、身份验证、依赖项、注入和机密泄露组织检查,也介绍 Agent 辅助扫描与持续跟踪发现项。
主要功能
- 01测试 OWASP Top 10 漏洞
- 02验证身份验证与授权
- 03扫描已知依赖漏洞
- 04检查注入与机密泄露
- 05持续跟踪扫描发现项
适用场景
- 01开展安全审计
- 02测试端点访问控制
- 03在 CI/CD 中加入安全检查
- 04跟踪多次扫描的发现项
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ proffesor-for-testing/ agentic-qe --skill security-testing安装后在 Claude Code 中输入/security-testing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
config.jsonrun-history.jsonevals/security-testing.yamlreferences/compliance-agent-commands.mdowasp-top-10.mdschemas/output.jsonscripts/validate-config.jsontemplates/security-report.md详细介绍
安全测试
<default_to_action> 进行安全测试或审计时:
- 系统地测试 OWASP Top 10 漏洞
- 验证每个端点的身份验证和授权
- 扫描依赖项中的已知漏洞(npm audit)
- 检查注入攻击(SQL、XSS、命令)
- 确认代码/日志中未暴露密钥
快速安全检查:
- 访问控制 → 测试水平/垂直权限提升
- 加密 → 验证密码哈希、HTTPS,确保未暴露敏感数据
- 注入 → 测试 SQL 注入、XSS、命令注入
- 身份验证 → 测试弱密码、会话固定、MFA 强制执行
- 配置 → 检查错误消息是否泄露信息
关键成功因素:
- 像攻击者一样思考,像防御者一样构建
- 将安全内置于系统中,而不是在最后才添加
- 在 CI/CD 中持续测试,而不只是在发布前测试 </default_to_action>
速查卡
适用场景
- 安全审计和渗透测试
- 测试身份验证/授权
- 验证输入清理
- 审查安全配置
OWASP Top 10(2021)
| # | 漏洞 | 关键测试 |
|---|---|---|
| 1 | 访问控制失效 | 用户 A 访问用户 B 的数据 |
| 2 | 加密机制失效 | 明文密码、HTTP |
| 3 | 注入 | SQL/XSS/命令注入 |
| 4 | 不安全设计 | 速率限制、会话超时 |
| 5 | 安全配置错误 | 详细错误信息、暴露的 /admin |
| 6 | 易受攻击的组件 | npm audit、过时的软件包 |
| 7 | 身份验证失效 | 弱密码、未启用 MFA |
| 8 | 完整性失效 | 未签名更新、恶意软件 |
| 9 | 日志记录和监控失效 | 安全事件缺少审计跟踪 |
| 10 | SSRF | 服务端获取内部 URL |
工具
| 类型 | 工具 | 用途 |
|---|---|---|
| SAST | SonarQube、Semgrep | 静态代码分析 |
| DAST | OWASP ZAP、Burp | 动态扫描 |
| 依赖项 | npm audit、Snyk | 依赖项漏洞 |
| 密钥 | git-secrets、TruffleHog | 密钥扫描 |
Agent 协作
qe-security-scanner:多层 SAST/DAST 扫描qe-api-contract-validator:API 安全测试qe-quality-analyzer:安全代码审查
关键漏洞测试
1. 访问控制失效
// Horizontal escalation - User A accessing User B's data
test('user cannot access another user\'s order', async () => {
const userAToken = await login('userA');
const userBOrder = await createOrder('userB');
const response = await api.get(`/orders/${userBOrder.id}`, {
headers: { Authorization: `Bearer ${userAToken}` }
});
expect(response.status).toBe(403);
});
// Vertical escalation - Regular user accessing admin
test('regular user cannot access admin', async () => {
const userToken = await login('regularUser');
expect((await api.get('/admin/users', {
headers: { Authorization: `Bearer ${userToken}` }
})).status).toBe(403);
});
2. 注入攻击
// SQL Injection
test('prevents SQL injection', async () => {
const malicious = "' OR '1'='1";
const response = await api.get(`/products?search=${malicious}`);
expect(response.body.length).toBeLessThan(100); // Not all products
});
// XSS
test('sanitizes HTML output', async () => {
const xss = '<script>alert("XSS")</script>';
await api.post('/comments', { text: xss });
const html = (await api.get('/comments')).body;
expect(html).toContain('<script>');
expect(html).not.toContain('<script>');
});
3. 加密机制失效
test('passwords are hashed', async () => {
await db.users.create({ email: '[email protected]', password: 'MyPassword123' });
const user = await db.users.findByEmail('[email protected]');
expect(user.password).not.toBe('MyPassword123');
expect(user.password).toMatch(/^\$2[aby]\$\d{2}\$/); // bcrypt
});
test('no sensitive data in API response', async () => {
const response = await api.get('/users/me');
expect(response.body).not.toHaveProperty('password');
expect(response.body).not.toHaveProperty('ssn');
});
4. 安全配置错误
test('errors don\'t leak sensitive info', async () => {
const response = await api.post('/login', { email: '[email protected]', password: 'wrong' });
expect(response.body.error).toBe('Invalid credentials'); // Generic message
});
test('sensitive endpoints not exposed', async () => {
const endpoints = ['/debug', '/.env', '/.git', '/admin'];
for (let ep of endpoints) {
expect((await fetch(`https://example.com${ep}`)).status).not.toBe(200);
}
});
5. 速率限制
test('rate limiting prevents brute force', async () => {
const responses = [];
for (let i = 0; i < 20; i++) {
responses.push(await api.post('/login', { email: '[email protected]', password: 'wrong' }));
}
expect(responses.filter(r => r.status === 429).length).toBeGreaterThan(0);
});
安全检查清单
身份验证
- 密码要求严格(12 个字符以上)
- 密码哈希(bcrypt、scrypt、Argon2)
- 敏感操作启用 MFA
- 多次尝试失败后锁定账户
- 登录后更改会话 ID
- 会话超时
授权
- 在每个请求中检查授权
- 最小权限原则
- 不存在水平权限提升
- 不存在垂直权限提升
数据保护
- 全程使用 HTTPS
- 静态数据加密
- 代码/日志中不包含密钥
- 符合 PII 要求(GDPR)
输入验证
- 服务端验证
- 参数化查询(杜绝 SQL 注入)
- 输出编码(杜绝 XSS)
- 速率限制
CI/CD 集成
# GitHub Actions
security-checks:
steps:
- name: Dependency audit
run: npm audit --audit-level=high
- name: SAST scan
run: npm run sast
- name: Secret scan
uses: trufflesecurity/trufflehog@main
- name: DAST scan
if: github.ref == 'refs/heads/main'
run: docker run owasp/zap2docker-stable zap-baseline.py -t https://staging.example.com
提交前钩子:
#!/bin/sh
git-secrets --scan
npm run lint:security
Agent 辅助安全测试
// Comprehensive multi-layer scan
await Task("Security Scan", {
target: 'src/',
layers: { sast: true, dast: true, dependencies: true, secrets: true },
severity: ['critical', 'high', 'medium']
}, "qe-security-scanner");
// OWASP Top 10 testing
await Task("OWASP Scan", {
categories: ['broken-access-control', 'injection', 'cryptographic-failures'],
depth: 'comprehensive'
}, "qe-security-scanner");
// Validate fix
await Task("Validate Fix", {
vulnerability: 'CVE-2024-12345',
expectedResolution: 'upgrade package to v2.0.0',
retestAfterFix: true
}, "qe-security-scanner");
Agent 协作提示
记忆命名空间
aqe/security/
├── scans/* - Scan results
├── vulnerabilities/* - Found vulnerabilities
├── fixes/* - Remediation tracking
└── compliance/* - Compliance status
Fleet 协作
const securityFleet = await FleetManager.coordinate({
strategy: 'security-testing',
agents: [
'qe-security-scanner',
'qe-api-contract-validator',
'qe-quality-analyzer',
'qe-deployment-readiness'
],
topology: 'parallel'
});
常见错误
❌ 依靠隐蔽性实现安全
将管理页面藏在 /super-secret-admin → 使用适当的身份验证
❌ 只进行客户端验证
JavaScript 验证可以绕过 → 始终在服务端验证
❌ 信任用户输入
假设输入是安全的 → 清理、验证并转义所有输入
❌ 硬编码密钥
代码中包含 API 密钥 → 使用环境变量和密钥管理
合规与 Agent 命令行工具
有关 v3 Agent 专属命令(aqe security ...)、SAST/DAST 扫描代码、合规审计(SOC2/GDPR/HIPAA)、密钥检测和安全门控,请参阅 references/compliance-agent-commands.md。
相关技能
- agentic-quality-engineering - 使用 Agent 进行安全防护
- api-testing-patterns - API 安全测试
- compliance-testing - GDPR、HIPAA、SOC2
请记住
像攻击者一样思考: 你会尝试攻破什么?就测试什么。 像防御者一样构建: 在证明输入无害之前,始终假定它是恶意的。 持续测试: 安全测试是持续进行的,而非一次性的。
使用 Agent: Agent 可自动执行漏洞扫描、跟踪修复进度并验证修复。使用 Agent 大规模维护安全态势。
运行历史记录
每次安全扫描后,将结果追加到此技能目录中的 run-history.json:
node -e "
const fs = require('fs');
const h = JSON.parse(fs.readFileSync('.claude/skills/security-testing/run-history.json'));
h.runs.push({date: new Date().toISOString().split('T')[0], scan_types: ['sast','deps'], findings: {critical: 0, high: 0, medium: 0, low: 0}});
fs.writeFileSync('.claude/skills/security-testing/run-history.json', JSON.stringify(h, null, 2));
"
每次扫描前读取 run-history.json——跟踪各严重级别的发现数量随时间的变化。如果严重发现增加,则发出警报。
技能组合
- 代码审查期间 → 与
/code-review-quality搭配使用,进行质量与安全综合审查 - 验证发现 → 使用
/pentest-validation证明漏洞可利用 - 合规 → 使用
/compliance-testing满足法规要求
注意事项
npm audit可能会针对开发依赖项报告误报——使用--omit=dev过滤,仅保留与生产环境相关的结果- Agent 可能会跳过 DAST,转而执行速度更快的纯 SAST 扫描——如有需要,请明确要求同时执行两种扫描
- security-compliance 域的成功率为 100%——可将其作为提高其他技能可靠性的范例
- 扫描依赖项时,同时检查直接依赖和传递依赖——
npm audit --all可发现嵌套漏洞
评论
支持 Markdown