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

242 lines
6.8 KiB
Markdown
Raw Normal View 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 管理、漏洞修复流程、安全补丁
## 技术栈
### 认证与授权
```yaml
协议:
- 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 # 开源身份管理
```
### 加密库
```yaml
对称加密:
- AES-256-GCM # 推荐算法
哈希:
- bcrypt # 密码存储
- Argon2 # 抗 GPU/ASIC推荐
HMAC:
- HMAC-SHA256 # 消息认证
```
## OWASP Top 10 防护
### A01 - 访问控制失效
```python
# ✅ 正确示例:验证当前用户权限
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 - 加密失效
```python
# ✅ 使用 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 - 注入
```python
# ✅ 使用参数化查询
cursor.execute(
"SELECT * FROM users WHERE name = %s",
(query,)
)
# ✅ 使用 ORM
session.query(User).filter(User.name == query).all()
```
## JWT 实现
```python
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 实现
```python
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
```
## 安全头配置
```python
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
```
## 安全检查清单
```markdown
### 认证与授权
- [ ] 所有接口都有认证检查
- [ ] 密码使用 bcrypt/Argon2 哈希
- [ ] 实现账户锁定机制
- [ ] JWT 有合理的过期时间
- [ ] 实现 RBAC 访问控制
### 输入验证
- [ ] 所有用户输入都经过验证
- [ ] 使用参数化查询防止 SQL 注入
- [ ] HTML 输出转义防止 XSS
### 数据保护
- [ ] 敏感数据加密存储
- [ ] 传输层使用 TLS 1.3
- [ ] 密钥不硬编码
```
## 输出规范
- 安全代码经过完整测试
- 提供漏洞修复前后对比
- 说明安全风险和缓解措施
- 遵循最小权限原则
- 引用 OWASP/CWE 参考
## 参考文档
- [references/owasp-top10-guide.md](references/owasp-top10-guide.md) — OWASP Top 10 逐项防护指南
- [references/auth-patterns.md](references/auth-patterns.md) — 认证授权实现模式与安全头配置
## 禁止事项
- ❌ 不要硬编码密钥和密码
- ❌ 不要使用已知的弱加密算法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` 验证