安全测试Skill security-testing

这个技能用于进行安全测试和审计,基于OWASP原则,系统性地测试OWASP Top 10漏洞,验证认证和授权,扫描依赖漏洞,防止注入攻击等。适用于安全审计、渗透测试、代码审查等场景。关键词:安全测试、OWASP、网络安全、漏洞扫描、认证验证、依赖检查、安全审计。

安全审计 0 次安装 0 次浏览 更新于 3/9/2026

name: security-testing description: “使用OWASP原则测试安全漏洞。在进行安全审计、测试认证或实施安全实践时使用。” category: 专业测试 priority: 关键 tokenEstimate: 1200 agents: [qe-security-scanner, qe-api-contract-validator, qe-quality-analyzer] implementation_status: 优化 optimization_version: 1.0 last_optimized: 2025-12-02 dependencies: [] quick_reference_card: true tags: [安全, owasp, sast, dast, 漏洞, 认证, 注入] trust_tier: 3 validation: schema_path: schemas/output.json validator_path: scripts/validate-config.json eval_path: evals/security-testing.yaml

安全测试

<default_to_action> 当测试安全或进行审计时:

  1. 系统性地测试OWASP Top 10漏洞
  2. 验证每个端点的认证和授权
  3. 扫描依赖项中的已知漏洞(如npm audit)
  4. 检查注入攻击(SQL、XSS、命令)
  5. 验证秘密信息未在代码或日志中暴露

快速安全检查:

  • 访问控制 → 测试水平和垂直权限提升
  • 加密 → 验证密码哈希、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 秘密扫描

代理协调

  • qe-security-scanner:多层SAST/DAST扫描
  • qe-api-contract-validator:API安全测试
  • qe-quality-analyzer:安全代码审查

关键漏洞测试

1. 损坏的访问控制

// 水平提升 - 用户A访问用户B的数据
test('用户无法访问其他用户的订单', 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);
});

// 垂直提升 - 普通用户访问管理员
test('普通用户无法访问管理员', async () => {
  const userToken = await login('regularUser');
  expect((await api.get('/admin/users', {
    headers: { Authorization: `Bearer ${userToken}` }
  })).status).toBe(403);
});

2. 注入攻击

// SQL注入
test('防止SQL注入', async () => {
  const malicious = "' OR '1'='1";
  const response = await api.get(`/products?search=${malicious}`);
  expect(response.body.length).toBeLessThan(100); // 不是所有产品
});

// XSS
test('净化HTML输出', async () => {
  const xss = '<script>alert("XSS")</script>';
  await api.post('/comments', { text: xss });

  const html = (await api.get('/comments')).body;
  expect(html).toContain('&lt;script&gt;');
  expect(html).not.toContain('<script>');
});

3. 加密失败

test('密码已哈希', async () => {
  await db.users.create({ email: 'test@example.com', password: 'MyPassword123' });
  const user = await db.users.findByEmail('test@example.com');

  expect(user.password).not.toBe('MyPassword123');
  expect(user.password).toMatch(/^\$2[aby]\$\d{2}\$/); // bcrypt
});

test('API响应中无敏感数据', async () => {
  const response = await api.get('/users/me');
  expect(response.body).not.toHaveProperty('password');
  expect(response.body).not.toHaveProperty('ssn');
});

4. 安全配置错误

test('错误不泄露敏感信息', async () => {
  const response = await api.post('/login', { email: 'nonexistent@test.com', password: 'wrong' });
  expect(response.body.error).toBe('无效凭证'); // 通用消息
});

test('敏感端点未暴露', 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('速率限制防止暴力攻击', async () => {
  const responses = [];
  for (let i = 0; i < 20; i++) {
    responses.push(await api.post('/login', { email: 'test@example.com', password: 'wrong' }));
  }
  expect(responses.filter(r => r.status === 429).length).toBeGreaterThan(0);
});

安全检查清单

认证

  • [ ] 强密码要求(12+字符)
  • [ ] 密码哈希(bcrypt、scrypt、Argon2)
  • [ ] 敏感操作的多因素认证
  • [ ] 失败尝试后账户锁定
  • [ ] 登录后会话ID更改
  • [ ] 会话超时

授权

  • [ ] 每个请求检查授权
  • [ ] 最小权限原则
  • [ ] 无水平提升
  • [ ] 无垂直提升

数据保护

  • [ ] 到处使用HTTPS
  • [ ] 静态加密
  • [ ] 秘密信息不在代码或日志中
  • [ ] PII合规(GDPR)

输入验证

  • [ ] 服务器端验证
  • [ ] 参数化查询(无SQL注入)
  • [ ] 输出编码(无XSS)
  • [ ] 速率限制

CI/CD集成

# GitHub Actions
security-checks:
  steps:
    - name: 依赖项审计
      run: npm audit --audit-level=high

    - name: SAST扫描
      run: npm run sast

    - name: 秘密扫描
      uses: trufflesecurity/trufflehog@main

    - name: DAST扫描
      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

代理辅助安全测试

// 全面多层扫描
await Task("安全扫描", {
  target: 'src/',
  layers: { sast: true, dast: true, dependencies: true, secrets: true },
  severity: ['critical', 'high', 'medium']
}, "qe-security-scanner");

// OWASP Top 10测试
await Task("OWASP扫描", {
  categories: ['broken-access-control', 'injection', 'cryptographic-failures'],
  depth: 'comprehensive'
}, "qe-security-scanner");

// 验证修复
await Task("验证修复", {
  vulnerability: 'CVE-2024-12345',
  expectedResolution: '升级包到v2.0.0',
  retestAfterFix: true
}, "qe-security-scanner");

代理协调提示

内存命名空间

aqe/security/
├── scans/*           - 扫描结果
├── vulnerabilities/* - 发现的漏洞
├── fixes/*           - 修复跟踪
└── compliance/*      - 合规状态

舰队协调

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密钥 → 环境变量、秘密管理


相关技能


记住

像攻击者一样思考: 你会尝试破坏什么?测试它。 像防御者一样构建: 假设输入是恶意的,直到证明相反。 持续测试: 安全测试是持续的,不是一次性的。

使用代理: 代理自动化漏洞扫描、跟踪修复和验证修复。使用代理大规模维护安全态势。