chore(iot): убрать мёртвый mqtt_auth.go + constant-time админ-токен (Этап 5)
- Удалён internal/service/api/handler/mqtt_auth.go: методы MQTTAuth/MQTTAcl нигде не подключены (мёртвый код; при подключении небезопасен — доверял клиентскому clientid и разрешал subscribe на '#'). - admin.go: сравнение ADMIN_STATS_TOKEN через subtle.ConstantTimeCompare.
This commit is contained in:
@@ -7,6 +7,7 @@ package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/subtle"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -19,8 +20,11 @@ func (h *Handler) AdminStats(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// Constant-time сравнение токена: обычное != давало утечку по времени (ревью 2026-10-10).
|
||||
authHeader := r.Header.Get("Authorization")
|
||||
if !strings.HasPrefix(authHeader, "Bearer ") || strings.TrimPrefix(authHeader, "Bearer ") != h.Cfg.AdminStatsToken {
|
||||
token := strings.TrimPrefix(authHeader, "Bearer ")
|
||||
if !strings.HasPrefix(authHeader, "Bearer ") ||
|
||||
subtle.ConstantTimeCompare([]byte(token), []byte(h.Cfg.AdminStatsToken)) != 1 {
|
||||
writeJSON(w, http.StatusUnauthorized, errResp("unauthorized"))
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user