atomic-websocket-origin-check.md 1.4 KB

WebSocket CheckOrigin: защита от CSWSH-атак

Контекст: WebSocket хаб в handlers/websocket.go имел CheckOrigin: return true при пустом списке разрешённых origins — классическая уязвимость Cross-Site WebSocket Hijacking (CSWSH).

Суть: Злоумышленник может разместить на своём сайте скрипт, который откроет WebSocket к photoplaces.ru от имени жертвы и будет читать/отправлять данные.

CheckOrigin: func(r *http.Request) bool {
    if len(h.allowedOrigins) == 0 {
        return !h.isProd // В dev — разрешаем, в prod — блокируем
    }
    origin := r.Header.Get("Origin")
    for _, o := range h.allowedOrigins {
        if o == origin {
            return true
        }
    }
    return false
},

Дополнительные меры:

  1. Write deadline (10s) — защита от slow-client DoS
  2. Логирование при отклонении соединения
  3. ALLOWED_ORIGINS в конфиге — единый источник истины

Связанные заметки: [[backend-auth-security]], [[deploy-production-readiness]] Источник: Code review: P0 fix в handlers/websocket.go

#security #backend #websocket #architecture