fix: 密码长度上限校验 + 请求体大小限制防 DoS
- 新增 validatePassword 校验函数(6-72 字节,bcrypt 硬上限),统一应用于 ChangePassword/CreateUser/UpdateUser,超长密码返回清晰提示而非迷惑性的"密码加密失败" - 新增 BodyLimit 中间件(http.MaxBytesReader),对所有 /api JSON 端点限制 1 MiB 请求体,防止内存耗尽型 DoS;/ws 走连接劫持不受影响
This commit is contained in:
@@ -14,11 +14,13 @@ import (
|
||||
func Setup(r *gin.Engine) {
|
||||
r.GET("/ws", vpn.HandleWS)
|
||||
|
||||
r.POST("/api/login", middleware.LoginRateLimit(), handler.Login)
|
||||
bodyLimit := middleware.BodyLimit(1 << 20) // 1 MiB
|
||||
|
||||
r.POST("/api/login", bodyLimit, middleware.LoginRateLimit(), handler.Login)
|
||||
r.GET("/api/version", handler.GetVersion)
|
||||
|
||||
auth := r.Group("/api")
|
||||
auth.Use(middleware.AuthMiddleware())
|
||||
auth.Use(middleware.AuthMiddleware(), bodyLimit)
|
||||
{
|
||||
auth.GET("/me", handler.Me)
|
||||
auth.PUT("/me/password", handler.ChangePassword)
|
||||
@@ -27,7 +29,7 @@ func Setup(r *gin.Engine) {
|
||||
}
|
||||
|
||||
admin := r.Group("/api/admin")
|
||||
admin.Use(middleware.AuthMiddleware(), middleware.AdminMiddleware())
|
||||
admin.Use(middleware.AuthMiddleware(), middleware.AdminMiddleware(), bodyLimit)
|
||||
{
|
||||
admin.GET("/stats", handler.GetAdminStats)
|
||||
admin.GET("/users/count", handler.GetUserCount)
|
||||
|
||||
Reference in New Issue
Block a user