Shiro安全防护实战:CSRF防御与会话管理指南
Shiro安全防护机制实战指南
1. CSRF防御:Token校验与表单防护
CSRF(跨站请求伪造)是一种常见攻击方式,Shiro通过内置的CsrfFilter
提供防护。
实现原理:
- 服务端生成随机Token(存储在Session中)
- 表单提交/API请求必须携带该Token
- 服务端校验Token有效性
// 启用CSRF防护(shiro.ini配置)
[main]
csrfFilter = org.apache.shiro.web.filter.authc.CsrfFilter
filterChainDefinitionMap.put("/**", csrfFilter)
// 表单中需添加Token
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
实践建议:
- 对敏感操作(如转账、改密)必须启用CSRF防护
- Token应设置合理有效期(默认与Session一致)
- 配合
Referer
头校验增强安全性
2. 会话固定攻击防护:Session ID迁移策略
会话固定攻击指攻击者诱骗用户使用已知的Session ID登录。
Shiro防护方案:
配置方式:
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// 启用会话固定防护
sessionManager.setSessionIdUrlRewritingEnabled(false);
sessionManager.setSessionValidationSchedulerEnabled(true);
3. 暴力破解防护:登录尝试限制与锁定
实现方案:
public class RetryLimitRealm extends AuthorizingRealm {
private Cache<String, AtomicInteger> passwordRetryCache;
@Override
protected AuthenticationInfo doGetAuthenticationInfo(...) {
AtomicInteger retryCount = passwordRetryCache.get(username);
if (retryCount != null && retryCount.get() > 5) {
throw new ExcessiveAttemptsException();
}
// ...正常认证逻辑
}
}
最佳实践:
- 失败次数阈值建议3-5次
- 锁定时间逐渐递增(如5分钟→30分钟→24小时)
- 记录审计日志用于分析攻击行为
4. HTTPS强制:安全传输层配置
配置示例:
[main]
sslFilter = org.apache.shiro.web.filter.authz.SslFilter
sslFilter.port = 443
[urls]
/** = sslFilter
部署建议:
- 使用Let's Encrypt获取免费证书
- 启用HSTS头(Strict-Transport-Security)
- 定期更新SSL/TLS协议版本
5. CORS支持:跨域资源访问控制
Shiro集成方案:
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("https://trusted.com");
config.setAllowCredentials(true);
DefaultFilterChainManager manager = new DefaultFilterChainManager();
manager.addFilter("cors", new CorsFilter(config));
安全策略:
- 严格限制
Access-Control-Allow-Origin
- 敏感接口禁用CORS
- 预检请求(OPTIONS)应快速响应
综合防护建议:
- 生产环境应组合使用多种防护机制
- 定期进行安全扫描和渗透测试
- 保持Shiro版本更新(修复已知漏洞)
- 敏感操作应增加二次验证(如短信验证码)
通过合理配置这些安全机制,可以显著提升基于Shiro的应用系统安全性。实际部署时应根据业务特点调整防护策略的严格程度。
评论已关闭