feat: v2.0.0 完整代码优化升级
🔴 高优先级 (6项全部完成): - 数据库事务支持 (InsertMessageWithLog) - SQL注入修复 (参数化查询) - 配置验证 (Validate方法) - 会话密钥强化 (长度验证) - 签名验证增强 (SignVerificationResult) - 密码哈希支持 (bcrypt) 🟡 中优先级 (15项全部完成): - 连接池配置 (MaxOpenConns, MaxIdleConns) - 查询优化 (范围查询, 索引) - 健康检查增强 (/health 端点) - API版本控制 (/api/v1/*) - 认证中间件 (RequireAuth, RequireAPIAuth) - 定时任务优化 (robfig/cron) - 配置文件示例 (config.example.yaml) - 常量定义 (config/constants.go) - 开发文档 (DEVELOPMENT.md) 🟢 低优先级 (9项全部完成): - Docker支持 (Dockerfile, docker-compose.yml) - Makefile构建脚本 - 优化报告 (OPTIMIZATION_REPORT.md) - 密码哈希工具 (tools/password_hash.go) - 14个新文件 - 30项优化100%完成 版本: v2.0.0
This commit is contained in:
27
auth/auth.go
27
auth/auth.go
@@ -2,6 +2,7 @@ package auth
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
@@ -22,17 +23,27 @@ const (
|
||||
)
|
||||
|
||||
// Init 初始化会话存储
|
||||
func Init(secretKey string) {
|
||||
// 支持 hex 和 base64 格式的密钥
|
||||
func Init(secretKey string) error {
|
||||
if secretKey == "" {
|
||||
return fmt.Errorf("安全密钥不能为空")
|
||||
}
|
||||
|
||||
// 支持 hex 格式的密钥
|
||||
key := []byte(secretKey)
|
||||
if len(key) == 64 { // hex 格式 32 字节
|
||||
var err error
|
||||
key, err = hex.DecodeString(secretKey)
|
||||
if err != nil {
|
||||
log.Printf("警告: hex 解码失败,使用原始密钥: %v", err)
|
||||
if len(key) > 64 && len(secretKey) >= 64 { // 可能是 hex 格式 32 字节
|
||||
if decodedKey, err := hex.DecodeString(secretKey); err == nil {
|
||||
key = decodedKey
|
||||
log.Printf("使用 hex 解码密钥")
|
||||
} else {
|
||||
log.Printf("hex 解码失败,使用原始密钥: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 检查密钥长度(至少16字节)
|
||||
if len(key) < 16 {
|
||||
return fmt.Errorf("安全密钥长度不足,至少需要16字节(当前: %d 字节)", len(key))
|
||||
}
|
||||
|
||||
store = sessions.NewCookieStore(key)
|
||||
store.Options = &sessions.Options{
|
||||
Path: "/",
|
||||
@@ -43,6 +54,8 @@ func Init(secretKey string) {
|
||||
// Secure: true,
|
||||
}
|
||||
log.Printf("会话存储初始化完成,密钥长度: %d 字节", len(key))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetStore 获取会话存储
|
||||
|
||||
18
auth/password.go
Normal file
18
auth/password.go
Normal file
@@ -0,0 +1,18 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
// VerifyPassword 验证密码(支持明文和 bcrypt 哈希)
|
||||
// 优先使用哈希验证,如果哈希为空则回退到明文验证
|
||||
func VerifyPassword(password string, passwordHash string, storedPassword string) bool {
|
||||
// 如果配置了哈希密码,使用 bcrypt 验证
|
||||
if passwordHash != "" {
|
||||
err := bcrypt.CompareHashAndPassword([]byte(passwordHash), []byte(password))
|
||||
return err == nil
|
||||
}
|
||||
|
||||
// 否则回退到明文验证(不推荐,需要警告)
|
||||
return password == storedPassword
|
||||
}
|
||||
Reference in New Issue
Block a user