Security Go — 攻击检测库
Go 语言编写的攻击检测包,覆盖 32 个检测器、5 大攻击类别、3 种可插拔存储后端。统一接口 + 注册表模式,纯检测库,适配任何 Go HTTP 框架。
设计思路
核心原则
- 零依赖检测 — 所有检测器仅使用 Go 标准库
regexp,无外部依赖 - 统一接口 — 每个检测器实现
Detector接口(Name()+Detect()),通过Engine注册表统一管理 - 预编译正则 — 所有模式在
var初始化时编译,运行时零开销 - 按需配置 — 注入/协议/数据/文件检测器即插即用;HTTP 校验器需应用自定义配置
设计架构
1 | ┌───────────────────────────────┐ |
数据流
1 | HTTP Request |
严重程度分级
| 级别 | 说明 | 典型场景 |
|---|---|---|
SeverityLow |
低风险 | 非法 HTTP 方法、Content-Type 不匹配 |
SeverityMedium |
中风险 | CORS 配置问题、开放重定向、GraphQL 内省 |
SeverityHigh |
高风险 | XSS、SQL 注入、SSRF、路径遍历 |
SeverityCritical |
严重 | 命令注入、JNDI、SSTI、XXE、数据泄露 |
实现功能
注入类攻击 (10)
| 检测器 | 检测模式 | ||
|---|---|---|---|
| XSS | <script>、on[a-z]+= 事件处理器、javascript: 伪协议、SVG/CSS 注入、eval()、document.cookie |
||
| SQL 注入 | UNION SELECT(含 /**/ 绕过)、sleep/benchmark/pg_sleep、布尔盲注、information_schema 枚举、xp_cmdshell |
||
| 命令注入 | 反引号、$()、管道符、/dev/tcp、PHP system/exec/shell_exec、链式执行 && ; `\ |
\ | ` |
| NoSQL 注入 | MongoDB $ne $gt $regex $where 操作符、$func、JSON 键注入 |
||
| LDAP 注入 | 过滤操作符 `(\ | (&(!、objectClass=*`、URL 编码绕过 |
|
| XPATH 注入 | 布尔绕过 ' or '1'='1、string-length()、count() |
||
| JNDI/Log4Shell | ${jndi:ldap://、${lower:j} 混淆、${env:} 环境变量、ldap/rmi/dns 协议 |
||
| SSI 注入 | <!--#exec cmd=、<!--#include file=、<!--#echo var= |
||
| GraphQL 注入 | __schema/__type 内省、深度嵌套 DoS(5层+)、mutation 检测 |
||
| SSTI | Jinja2 {{}}、FreeMarker ${}、ERB <% %>、Python MRO 遍历、config/self 访问 |
协议与请求攻击 (9)
| 检测器 | 检测模式 |
|---|---|
| SSRF | 内网 IP(127/10/172.16/192.168)、169.254.169.254、IPv6 loopback、gopher/dict/file/ftp 协议 |
| XXE | <!ENTITY SYSTEM/PUBLIC、参数实体 %entity;、DOCTYPE 声明 |
| HTTP 头注入 | CRLF %0d%0a / \r\n、Set-Cookie/Location/Content-Length 注入 |
| Host 头攻击 | CRLF Host 注入、X-Forwarded-Host、X-Original-URL 投毒 |
| 请求走私 | Transfer-Encoding/Content-Length 不一致、双重 TE 头、\x0b 折叠头混淆 |
| 开放重定向 | //evil.com 协议相对 URL、javascript:/data: 伪协议 |
| CORS 绕过 | Origin: null、Access-Control-Allow-* 头注入 |
| WebSocket 劫持 | Upgrade 头注入、null Origin 绕过、ws:// URL |
| DNS 重绑定 | Host 头内网 IP、localhost、无 TLD 短主机名 |
HTTP 协议层校验 (5)
| 检测器 | 说明 |
|---|---|
| HTTP 方法 | 仅允许 GET/POST/PUT/DELETE/HEAD/OPTIONS/PATCH,其他返回告警 |
| 请求体大小 | 超过上限(默认 10MB)触发告警 |
| Content-Type | 仅允许配置的 MIME 类型白名单 |
| CSRF Origin | 检测跨域请求 Origin 与 Host 是否匹配,支持额外白名单 |
| IP 黑名单 | 窗口时间 N 次攻击后自动封禁(默认 5次/60s→封禁15分钟),支持 File/Redis/Memory 存储 |
数据与序列化攻击 (5)
| 检测器 | 检测模式 | |
|---|---|---|
| PHP 反序列化 | O:数字: / C:数字: 序列化对象、unserialize()、魔术方法(__wakeup/__destruct) |
|
| CSV 注入 | `=cmd\ | 、@SUM(、+/-公式前缀、HYPERLINK/DDE` |
| 邮件头注入 | Bcc/Cc/From/To 注入、MIME multipart、boundary 参数 | |
| JWT 攻击 | alg: none 绕过、kid 路径遍历、空签名检测(结构解码分析) |
|
| 原型污染 | __proto__/constructor 键、__defineGetter__/__defineSetter__ |
文件与敏感数据 (3)
| 检测器 | 检测模式 |
|---|---|
| 路径遍历 | ../、..\\、php://filter/php://input、null 字节、URL 编码绕过、/etc/passwd |
| 恶意上传 | 扩展名白名单(15种)+ PHP 标签 <?php/<?= 内容扫描 |
| 数据泄露 | 信用卡号、AWS Access Key、私钥 -----BEGIN、数据库连接串、API Token、JWT Secret、GitHub PAT |
存储后端 (3)
| 后端 | 说明 |
|---|---|
| Memory | sync.Mutex + map,30s 自动清理过期条目 |
| File | JSON 文件持久化,Close 时 flush |
| Redis | 独立子模块,Pipeline Incr + TTL,需 go-redis/v9 |
使用说明
安装
1 | go get github.com/erikwang2013/security-go |
快速开始
1 | package main |
HTTP 请求检测
1 | func handler(w http.ResponseWriter, r *http.Request) { |
HTTP 校验器配置
1 | // 方法校验 |
自定义检测器
1 | type MyDetector struct{} |
相关文档
Copyright (c) 2026 erik erik@erik.xyz — https://erik.xyz
本文作者:
艾瑞可erik
本文链接: https://erik.xyz/2026/07/29/security-go/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://erik.xyz/2026/07/29/security-go/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!