## WebSocket CheckOrigin: защита от CSWSH-атак **Контекст:** WebSocket хаб в `handlers/websocket.go` имел `CheckOrigin: return true` при пустом списке разрешённых origins — классическая уязвимость Cross-Site WebSocket Hijacking (CSWSH). **Суть:** Злоумышленник может разместить на своём сайте скрипт, который откроет WebSocket к photoplaces.ru от имени жертвы и будет читать/отправлять данные. ```go 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