MED-03: 数据库密码明文配置 - 在 gateway/internal/config/config.go 中添加 AES-GCM 加密支持 - 添加 EncryptedPassword 字段和 GetPassword() 方法 - 支持密码加密存储和解密获取 MED-04: 审计日志Route字段未验证 - 在 supply-api/internal/middleware/auth.go 中添加 sanitizeRoute() 函数 - 防止路径遍历攻击(.., ./, \ 等) - 防止 null 字节和换行符注入 MED-05: 请求体大小无限制 - 在 gateway/internal/handler/handler.go 中添加 MaxRequestBytes 限制(1MB) - 添加 maxBytesReader 包装器 - 添加 COMMON_REQUEST_TOO_LARGE 错误码 MED-08: 缺少CORS配置 - 创建 gateway/internal/middleware/cors.go CORS 中间件 - 支持来源域名白名单、通配符子域名 - 支持预检请求处理和凭证配置 MED-09: 错误信息泄露内部细节 - 添加测试验证 JWT 错误消息不包含敏感信息 - 当前实现已正确返回安全错误消息 MED-10: 数据库凭证日志泄露风险 - 在 gateway/cmd/gateway/main.go 中使用 GetPassword() 代替 Password - 避免 DSN 中明文密码被记录 MED-11: 缺少Token刷新机制 - 当前 verifyToken() 已正确验证 token 过期时间 - Token 刷新需要额外的 refresh token 基础设施 MED-12: 缺少暴力破解保护 - 添加 BruteForceProtection 结构体 - 支持最大尝试次数和锁定时长配置 - 在 TokenVerifyMiddleware 中集成暴力破解保护
32 lines
727 B
Go
32 lines
727 B
Go
package middleware
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestSanitizeRoute(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
expected string
|
|
}{
|
|
{"/api/v1/test", "/api/v1/test"},
|
|
{"/", "/"},
|
|
{"", ""},
|
|
{"/api/../../../etc/passwd", "/sanitized"},
|
|
{"../../etc/passwd", "/sanitized"},
|
|
{"/api/v1/../admin", "/sanitized"},
|
|
{"/api\\v1\\admin", "/sanitized"},
|
|
{"/api/v1" + string(rune(0)) + "/admin", "/sanitized"},
|
|
{"/api/v1\n/admin", "/sanitized"},
|
|
{"/api/v1\r/admin", "/sanitized"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.input, func(t *testing.T) {
|
|
result := sanitizeRoute(tt.input)
|
|
if result != tt.expected {
|
|
t.Errorf("sanitizeRoute(%q) = %q, want %q", tt.input, result, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
} |