Security Protection Plugin
对应模块:
io.gitee.lcgyl:lcgyl-security-protection-plugin
Web 安全防护增强模块,防御常见网络攻击。
✨ 特性
- ✅ XSS 防护 - 自动过滤输入中的恶意脚本
- ✅ CSRF 防护 - Token 验证机制
- ✅ SQL 注入防护 - 敏感字符检测
- ✅ IP 黑白名单 - 访问控制列表
- ✅ 请求频率限制 - 防止暴力破解
🚀 快速开始
依赖引入
gradle
implementation 'io.gitee.lcgyl:lcgyl-security-protection-plugin:2.2.0'配置
yaml
lcgyl:
security:
protection:
# XSS 防护
xss:
enabled: true
mode: ESCAPE # ESCAPE, CLEAN, REJECT
exclude-paths:
- /api/admin/content/**
# CSRF 防护
csrf:
enabled: true
token-header: X-CSRF-TOKEN
cookie-name: CSRF-TOKEN
exclude-paths:
- /api/public/**
# SQL 注入防护
sql-injection:
enabled: true
action: REJECT # REJECT, LOG
# IP 访问控制
ip-filter:
enabled: true
whitelist:
- 192.168.1.0/24
blacklist:
- 10.0.0.100XSS 防护
java
@RestController
@RequestMapping("/api/posts")
public class PostController {
// 全局 XSS 防护自动生效
@PostMapping
public Post createPost(@RequestBody @XssClean CreatePostRequest request) {
// request.getContent() 已自动清理 XSS 内容
return postService.create(request);
}
// 跳过 XSS 检查(富文本编辑器场景)
@PostMapping("/rich-content")
@XssIgnore
public Post createRichPost(@RequestBody CreatePostRequest request) {
// 不过滤 XSS,需自行处理
return postService.create(request);
}
}CSRF 防护
java
// 前端获取 CSRF Token
@GetMapping("/csrf-token")
public Map<String, String> getCsrfToken(HttpServletRequest request) {
CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
return Map.of("token", token.getToken());
}
// 前端请求时携带 Token
// fetch('/api/users', {
// method: 'POST',
// headers: {
// 'X-CSRF-TOKEN': csrfToken
// },
// body: JSON.stringify(data)
// })SQL 注入防护
java
@Service
public class SearchService {
@Inject
private SqlInjectionDetector detector;
public List<User> search(String keyword) {
// 手动检测(自动检测已在 Filter 层完成)
if (detector.containsSqlInjection(keyword)) {
throw new SecurityException("检测到 SQL 注入攻击");
}
return userRepository.searchByKeyword(keyword);
}
}IP 黑白名单
java
@Service
public class IpFilterService {
@Inject
private IpAccessController ipController;
// 动态添加黑名单
public void blockIp(String ip, Duration duration) {
ipController.addToBlacklist(ip, duration);
}
// 动态添加白名单
public void allowIp(String ip) {
ipController.addToWhitelist(ip);
}
// 检查 IP 是否被允许
public boolean isAllowed(String ip) {
return ipController.isAllowed(ip);
}
}安全响应头
yaml
lcgyl:
security:
protection:
headers:
enabled: true
content-security-policy: "default-src 'self'"
x-frame-options: DENY
x-content-type-options: nosniff
x-xss-protection: "1; mode=block"
strict-transport-security: "max-age=31536000; includeSubDomains"