关于 owasp
owasp 是面向安全审查与开发的参考技能,依据 OWASP Top 10(2021)整理常见漏洞、控制措施和排查建议。适用于识别代码风险并落实基础防护。
主要功能
- 01OWASP Top 10(2021)漏洞参考
- 02常见安全控制示例
- 03代码审查反模式提示
- 04常见问题排查建议
适用场景
- 01审查代码中的访问控制和注入风险
- 02为密码与登录流程补充防护措施
- 03检查安全配置和日志处理
MCP 相关
README 提及可通过 mcp__documentation__fetch_docs 获取 OWASP 深入文档。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ claude-dev-suite/ claude-dev-suite --skill owasp安装后在 Claude Code 中输入/owasp确认已加载。
详细介绍
OWASP 安全——快速参考
何时使用此技能
- 识别常见漏洞
- 实施安全控制
- 在代码审查中检查安全问题
何时不使用此技能
- OWASP Top 10:2025 - 使用
owasp-top-10技能了解最新的 2025 年标准 - 密钥管理 - 使用
secrets-management技能处理凭据 - 供应链安全 - 使用
supply-chain技能处理依赖项问题 - JWT/OAuth 安全 - 使用身份验证技能处理特定协议的问题
深入了解:使用
mcp__documentation__fetch_docs并指定技术:owasp,获取全面的文档。
OWASP Top 10(2021)
A01:访问控制失效
// BAD - Direct object reference
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userRepository.findById(id);
}
// GOOD - Check authorization
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id, Authentication auth) {
User user = userRepository.findById(id);
if (!user.getId().equals(auth.getPrincipal().getId())) {
throw new AccessDeniedException("Not authorized");
}
return user;
}
A02:加密失效
// BAD - Weak hashing
String hash = DigestUtils.md5Hex(password);
// GOOD - Strong hashing with salt
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String hash = encoder.encode(password);
A03:注入
// BAD - SQL Injection
String query = "SELECT * FROM users WHERE name = '" + name + "'";
// GOOD - Parameterized query
@Query("SELECT u FROM User u WHERE u.name = :name")
User findByName(@Param("name") String name);
A04:不安全设计
- 在设计阶段进行威胁建模
- 在用户故事中纳入安全要求
- 采用纵深防御架构
A05:安全配置错误
# Spring Security - disable defaults carefully
spring:
security:
headers:
content-security-policy: "default-src 'self'"
x-frame-options: DENY
x-content-type-options: nosniff
A06:易受攻击的组件
# Check for vulnerabilities
npm audit
mvn dependency-check:check
pip-audit
A07:身份验证失效
// Implement rate limiting
@RateLimiter(name = "login", fallbackMethod = "loginFallback")
public AuthResponse login(LoginRequest request) {
// ...
}
// Account lockout
if (failedAttempts >= 5) {
lockAccount(user);
}
A08:软件完整性
- 验证依赖项的签名
- 使用锁定文件(package-lock.json、pom.xml)
- 保障 CI/CD 流水线安全
A09:日志记录失效
// Log security events
log.info("Login attempt", Map.of(
"user", username,
"ip", request.getRemoteAddr(),
"success", authenticated
));
// DON'T log sensitive data
log.info("Password: {}", password); // NEVER!
A10:SSRF
// Validate URLs
private boolean isAllowedUrl(String url) {
URL parsed = new URL(url);
return allowedHosts.contains(parsed.getHost());
}
安全标头
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) {
return http
.headers(headers -> headers
.contentSecurityPolicy(csp -> csp.policyDirectives("default-src 'self'"))
.frameOptions(frame -> frame.deny())
.xssProtection(xss -> xss.disable())
)
.build();
}
}
反模式
| 反模式 | 不良原因 | 正确做法 |
|---|---|---|
| 未经身份验证直接引用对象 | IDOR 漏洞(A01) | 访问前始终验证所有权 |
| 使用 MD5/SHA1 存储密码 | 容易破解 | 使用带盐的 bcrypt/argon2 |
| 在 SQL 中拼接字符串 | SQL 注入 | 使用参数化查询/ORM |
| 在生产环境中暴露堆栈跟踪 | 信息泄露 | 仅显示通用错误消息 |
| 登录时未进行速率限制 | 暴力破解攻击 | 实施速率限制和账户锁定 |
| 在代码中存储密钥 | 凭据泄露 | 使用环境变量/密钥库 |
快速故障排除
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 有效请求返回 403 Forbidden | CORS 配置错误 | 检查 CORS 配置中的允许来源 |
| 会话未持久化 | SameSite Cookie 问题 | 设置 SameSite=Lax,或在使用 HTTPS 时设置为 None |
| JWT 令牌被拒绝 | 时钟偏差或令牌已过期 | 添加时钟偏差容差(5min) |
| 文件上传失败 | CSP 阻止 | 将上传域名添加到 CSP 指令中 |
| API 意外返回 401 | Authorization 标头缺失或无效 | 检查 Bearer 令牌格式 |
评论
支持 Markdown