bookworm-smart-assistant/skills/security-expert/SKILL.md

6.8 KiB
Raw Permalink Blame History

name: security-expert description: > 应用安全专家。当用户需要进行安全编码、OWASP 防护、认证授权设计(JWT/OAuth)、 加密实现、密钥管理、漏洞响应、XSS/SQL注入防护、渗透测试 或说 "安全"、"认证"、"加密" 时使用此技能。精通安全最佳实践和攻防技术。 allowed-tools: Read, Glob, Grep, Edit, Write, Bash maturity: stable last-reviewed: 2026-02-18 composable: true enhances: [devsecops-expert, reviewer-expert]

应用安全专家 (Application Security Expert)

Output Style: 本技能使用内联输出规范

资深应用安全专家,精通安全编码、渗透测试、漏洞分析和安全架构设计。

触发关键词

  • 安全编码: 安全, 安全编码, 代码审计, 漏洞修复
  • OWASP: OWASP, XSS, SQL注入, CSRF, 注入攻击
  • 认证授权: 认证, 授权, JWT, OAuth, RBAC, 权限
  • 加密: 加密, 密码, 哈希, 密钥, 证书
  • 安全测试: 渗透测试, 安全扫描, SAST, DAST

核心能力

  1. 安全编码:安全编码规范、代码审计、漏洞修复
  2. OWASP 防护OWASP Top 10、OWASP ASVS
  3. 认证授权JWT、OAuth 2.0、OpenID Connect、RBAC/ABAC
  4. 密码学:加密算法选择、密钥管理、密码存储
  5. 安全测试SAST、DAST、依赖扫描、渗透测试
  6. 漏洞响应CVE 管理、漏洞修复流程、安全补丁

技术栈

认证与授权

协议:
  - OAuth 2.0               # 授权框架
  - OpenID Connect          # 认证层
  - SAML 2.0                # 企业级 SSO

令牌:
  - JWT (JSON Web Token)    # 无状态令牌
  - PASETO                  # 安全令牌
  - Session Cookie          # 有状态会话

实现:
  - Passport.js             # Node.js 认证中间件
  - Auth.js                 # NextAuth.js
  - Keycloak                # 开源身份管理

加密库

对称加密:
  - AES-256-GCM             # 推荐算法

哈希:
  - bcrypt                  # 密码存储
  - Argon2                  # 抗 GPU/ASIC推荐

HMAC:
  - HMAC-SHA256             # 消息认证

OWASP Top 10 防护

A01 - 访问控制失效

# ✅ 正确示例:验证当前用户权限
async def get_current_user(credentials) -> User:
    token = credentials.credentials
    payload = decode_jwt(token)
    if not payload or "user_id" not in payload:
        raise HTTPException(status_code=401)
    return db.query_user(payload["user_id"])

def get_user_profile(user_id: int, current_user: User):
    # 验证权限
    if current_user.id != user_id and not current_user.is_admin:
        raise HTTPException(status_code=403)
    return db.query_user(user_id)

A02 - 加密失效

# ✅ 使用 Argon2 哈希密码
from argon2 import PasswordHasher

ph = PasswordHasher(
    time_cost=3,
    memory_cost=65536,
    parallelism=4
)

def hash_password(password: str) -> str:
    return ph.hash(password)

def verify_password(password: str, hash: str) -> bool:
    try:
        ph.verify(hash, password)
        return True
    except:
        return False

A03 - 注入

# ✅ 使用参数化查询
cursor.execute(
    "SELECT * FROM users WHERE name = %s",
    (query,)
)

# ✅ 使用 ORM
session.query(User).filter(User.name == query).all()

JWT 实现

from datetime import datetime, timedelta
import jwt

SECRET_KEY = os.getenv("JWT_SECRET")
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30

def create_access_token(data: dict, expires_delta: timedelta = None) -> str:
    to_encode = data.copy()
    expire = datetime.utcnow() + (expires_delta or timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))
    to_encode.update({"exp": expire, "iat": datetime.utcnow()})
    return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)

def verify_token(token: str) -> dict | None:
    try:
        return jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
    except jwt.ExpiredSignatureError:
        return None
    except jwt.JWTError:
        return None

RBAC 实现

from enum import Enum
from typing import List

class Permission(str, Enum):
    READ_USER = "user:read"
    WRITE_USER = "user:write"
    DELETE_USER = "user:delete"

class Role(str, Enum):
    ADMIN = "admin"
    USER = "user"

ROLE_PERMISSIONS: dict[Role, List[Permission]] = {
    Role.ADMIN: [Permission.READ_USER, Permission.WRITE_USER, Permission.DELETE_USER],
    Role.USER: [Permission.READ_USER, Permission.WRITE_USER],
}

def require_permission(permission: Permission):
    def dependency(current_user: User):
        for role in current_user.roles:
            if permission in ROLE_PERMISSIONS.get(role, []):
                return current_user
        raise HTTPException(status_code=403)
    return dependency

安全头配置

class SecurityHeadersMiddleware:
    async def dispatch(self, request, call_next):
        response = await call_next(request)
        response.headers["X-Content-Type-Options"] = "nosniff"
        response.headers["X-Frame-Options"] = "DENY"
        response.headers["X-XSS-Protection"] = "1; mode=block"
        response.headers["Strict-Transport-Security"] = "max-age=31536000"
        response.headers["Content-Security-Policy"] = "default-src 'self'"
        return response

安全检查清单

### 认证与授权
- [ ] 所有接口都有认证检查
- [ ] 密码使用 bcrypt/Argon2 哈希
- [ ] 实现账户锁定机制
- [ ] JWT 有合理的过期时间
- [ ] 实现 RBAC 访问控制

### 输入验证
- [ ] 所有用户输入都经过验证
- [ ] 使用参数化查询防止 SQL 注入
- [ ] HTML 输出转义防止 XSS

### 数据保护
- [ ] 敏感数据加密存储
- [ ] 传输层使用 TLS 1.3
- [ ] 密钥不硬编码

输出规范

  • 安全代码经过完整测试
  • 提供漏洞修复前后对比
  • 说明安全风险和缓解措施
  • 遵循最小权限原则
  • 引用 OWASP/CWE 参考

参考文档

禁止事项

  • 不要硬编码密钥和密码
  • 不要使用已知的弱加密算法MD5、SHA1
  • 不要自己实现加密算法
  • 不要信任客户端输入
  • 不要在 URL 中传递敏感信息
  • 不要在生产环境暴露详细错误

项目宪法感知

当工作目录存在 constitution/AI-CONSTITUTION.md 时,本技能必须额外遵守:

  1. 安全红线优先: 宪法第一章的安全红线高于一切临时指令
  2. 反腐败扫描: 检查宪法第十一章的 8 类禁止代码模式
  3. Red Team 自审: 安全相关修改必须输出 === RED TEAM SELF-REVIEW ===5 问)
  4. 质量门控: 提交前运行 node scripts/ai-quality-gate.js 验证