review-security

📁 sundny8/hydpromptkit 📅 Today
2
总安装量
1
周安装量
#70458
全站排名
安装命令
npx skills add https://github.com/sundny8/hydpromptkit --skill review-security

Agent 安装分布

amp 1
cline 1
qoder 1
opencode 1
cursor 1
kimi-cli 1

Skill 文档

代码安全性评审

语言要求

所有输出内容必须使用中文,包括安全评审报告、问题描述、安全建议、修复方案等。

功能说明

专注于代码安全性评审,识别和防范常见的安全漏洞,确保代码符合安全最佳实践。

参考文档

进行安全评审时,可参考 OWASP Top 10 安全风险清单。

使用方式

当用户提供待评审的代码(单个接口、模块或系统关键路径),并可选说明关注重点时,执行安全评审。

安全评审清单

1. 注入攻击防护

SQL 注入

  • 是否使用参数化查询或预编译语句
  • 是否直接拼接 SQL 语句
  • ORM 框架使用是否正确
  • 动态 SQL 是否安全

NoSQL 注入

  • MongoDB 查询是否安全
  • Redis 命令是否可被注入

命令注入

  • 是否执行外部命令
  • 命令参数是否经过验证
  • 是否使用白名单验证

LDAP/XPath 注入

  • LDAP 查询是否安全
  • XPath 表达式是否可控

2. 跨站脚本(XSS)

反射型 XSS

  • 用户输入是否经过转义
  • HTML 输出是否编码
  • JavaScript 上下文是否安全

存储型 XSS

  • 存储的用户内容是否过滤
  • 富文本编辑器是否配置白名单
  • 文件上传内容是否检查

DOM 型 XSS

  • DOM 操作是否安全
  • innerHTML 使用是否正确

3. 认证与授权

身份认证

  • 密码是否加密存储(使用 bcrypt/PBKDF2)
  • 是否使用安全的会话管理
  • Token 是否有过期时间
  • 是否防止暴力破解
  • 是否实现账号锁定机制

权限控制

  • 是否实现细粒度权限控制
  • 是否检查垂直越权
  • 是否检查水平越权
  • 默认权限是否最小化
  • 敏感操作是否二次验证

4. 敏感数据保护

数据加密

  • 敏感数据是否加密存储
  • 传输是否使用 HTTPS
  • 加密算法是否安全(避免 MD5/SHA1)
  • 密钥管理是否安全

数据脱敏

  • 日志中是否包含敏感信息
  • 错误信息是否泄露敏感数据
  • 接口返回是否脱敏

5. 会话管理

  • Session ID 是否安全生成
  • 是否设置 HttpOnly Cookie
  • 是否设置 Secure Cookie
  • 是否设置 SameSite 属性
  • 会话超时是否合理
  • 注销是否清除会话

6. 文件操作安全

文件上传

  • 是否验证文件类型
  • 是否限制文件大小
  • 是否检查文件内容
  • 上传路径是否可控
  • 文件名是否过滤

文件下载

  • 是否验证文件路径
  • 是否防止路径遍历
  • 是否检查文件权限

7. 业务逻辑漏洞

  • 是否存在越权访问
  • 是否有重放攻击风险
  • 是否有条件竞争
  • 是否有业务流程绕过
  • 是否有金额篡改风险

8. 配置安全

  • 敏感配置是否加密
  • 默认密码是否修改
  • 调试信息是否关闭
  • 错误详情是否隐藏

常见安全问题示例

1. SQL 注入

// ❌ 不安全的代码
String sql = "SELECT * FROM user WHERE username = '" + username + "'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

// ✅ 安全的代码
String sql = "SELECT * FROM user WHERE username = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, username);
ResultSet rs = pstmt.executeQuery();

// ✅ 使用 MyBatis
@Select("SELECT * FROM user WHERE username = #{username}")
User selectByUsername(@Param("username") String username);

2. XSS 攻击

// ❌ 不安全的代码
String content = request.getParameter("content");
response.getWriter().write(content);

// ✅ 安全的代码
String content = request.getParameter("content");
String safeContent = StringEscapeUtils.escapeHtml4(content);
response.getWriter().write(safeContent);

3. 密码安全

// ❌ 不安全的代码
String password = request.getParameter("password");
String md5Password = DigestUtils.md5Hex(password);
user.setPassword(md5Password);

// ✅ 安全的代码
String password = request.getParameter("password");
String hashedPassword = BCrypt.hashpw(password, BCrypt.gensalt(12));
user.setPassword(hashedPassword);

4. 权限控制

// ❌ 不安全的代码
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
    return userService.getById(id); // 未检查权限
}

// ✅ 安全的代码
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
    Long currentUserId = SecurityUtils.getCurrentUserId();
    if (!id.equals(currentUserId) && !SecurityUtils.isAdmin()) {
        throw new ForbiddenException("无权访问其他用户信息");
    }
    return userService.getById(id);
}

安全评审报告格式

# 安全评审报告

## 概览
- 评审文件:xxx.java
- 评审时间:2024-xx-xx
- 风险等级:🔴 高风险 / 🟠 中风险 / 🟢 低风险

## 发现的安全问题

### 🔴 高危漏洞(x 个)
1. **SQL 注入漏洞**
   - 位置:UserService.java:45
   - 风险:攻击者可执行任意 SQL 命令
   - 影响:数据泄露、数据篡改、权限提升
   - 修复建议:使用 PreparedStatement
   - 示例代码:[...]

### 🟠 中危漏洞(x 个)
...

### 🟢 低危问题(x 个)
...

## 安全加固建议
1. 实施输入验证白名单机制
2. 启用 HTTPS 强制跳转
3. 配置安全响应头
4. 实施日志审计
5. 定期安全扫描

## 合规性检查
- [ ] OWASP Top 10 检查
- [ ] 等保要求检查
- [ ] 企业安全规范检查

OWASP Top 10 检查清单

  1. A01:2021 – 访问控制失效
  2. A02:2021 – 加密机制失效
  3. A03:2021 – 注入攻击
  4. A04:2021 – 不安全设计
  5. A05:2021 – 安全配置错误
  6. A06:2021 – 易受攻击和过时的组件
  7. A07:2021 – 身份识别和身份验证失效
  8. A08:2021 – 软件和数据完整性失效
  9. A09:2021 – 安全日志和监控失效
  10. A10:2021 – 服务器端请求伪造(SSRF)

注意事项

  1. 全面性:覆盖所有常见安全漏洞类型
  2. 深度:不仅检查表面问题,还要分析潜在风险
  3. 实用性:提供可操作的修复建议
  4. 优先级:按风险等级排序问题
  5. 验证:建议进行安全测试验证