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

242 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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` 验证