본문 바로가기
Q&A2024년 4월 23일1분 읽기

크로스 사이트 웹소켓 하이재킹(CSWSH) 방어

안
안소연
조회 447댓글 1

웹소켓에서 CSRF 비슷한 공격이 가능하다고 들었는데 어떻게 방어하나요?

댓글 1

김김영삼2년 전

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();
});
Ctrl+Enter로 등록