웹소켓에서 CSRF 비슷한 공격이 가능하다고 들었는데 어떻게 방어하나요?
CSWSH(Cross-Site WebSocket Hijacking)는 악성 사이트에서 사용자의 웹소켓 연결을 탈취하는 공격입니다.
원리: WebSocket 핸드셰이크는 HTTP이므로 쿠키가 자동 전송됨 → 악성 사이트에서 인증된 WebSocket 연결 가능
방어:
// 1. Origin 헤더 검증 (필수)wss.on("connection", (ws, req) => { const origin = req.headers.origin; if (origin !== "https://mysite.com") { ws.close(1008, "Invalid origin"); return; }});// 2. 토큰 기반 인증// 연결 시 URL 파라미터로 토큰 전달const ws = new WebSocket("wss://api.com/ws?token=JWT_TOKEN");// 서버에서 토큰 검증wss.on("connection", (ws, req) => { const token = new URL(req.url, "http://x").searchParams.get("token"); if (!verifyJWT(token)) ws.close();});
댓글 1
CSWSH(Cross-Site WebSocket Hijacking)는 악성 사이트에서 사용자의 웹소켓 연결을 탈취하는 공격입니다.
원리: WebSocket 핸드셰이크는 HTTP이므로 쿠키가 자동 전송됨 → 악성 사이트에서 인증된 WebSocket 연결 가능
방어: