"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > JavaScript의 사이트 간 요청 위조(CSRF) 이해 및 방지

JavaScript의 사이트 간 요청 위조(CSRF) 이해 및 방지

2024-11-08에 게시됨
검색:195

Understanding and Preventing Cross-Site Request Forgery (CSRF) in JavaScript

소개

끊임없이 진화하는 웹 보안 환경에서 CSRF(교차 사이트 요청 위조)는 개발자가 웹 애플리케이션의 무결성과 보안을 보장하기 위해 해결해야 하는 중요한 위협으로 남아 있습니다. 이 블로그 게시물에서는 CSRF가 무엇인지, 이것이 애플리케이션에 어떤 영향을 미칠 수 있는지 살펴보고 JavaScript를 사용하여 CSRF 공격을 방지할 수 있는 실용적인 솔루션을 제공할 것입니다. 결국 여러분은 CSRF에 대한 확실한 이해와 이 일반적인 보안 취약점으로부터 애플리케이션을 보호하는 방법을 갖게 될 것입니다.

CSRF란 무엇입니까?

교차 사이트 요청 위조(CSRF)는 사용자가 인증된 웹 애플리케이션에서 작업을 수행하도록 속이는 공격 유형입니다. 특정 웹사이트에 대한 사용자의 신뢰를 이용하는 XSS(교차 사이트 스크립팅)와 달리 CSRF는 사용자 브라우저에 대한 웹사이트의 신뢰를 이용합니다.

CSRF 공격의 작동 방식

CSRF 공격은 일반적으로 세 가지 주요 단계로 구성됩니다.

1. 피해자 인증: 피해자는 합법적인 웹사이트(예: 은행)에 로그인합니다.

2. 악의적인 요청: 공격자는 피해자를 대신하여 합법적인 사이트에 요청을 보내는 악성 사이트를 방문하도록 피해자를 속입니다.

3. 실행: 요청이 인증된 사용자로부터 온 것처럼 보이기 때문에 합법적인 사이트에서 요청을 처리하여 자금 이체 또는 계정 세부정보 변경과 같은 원치 않는 작업이 발생합니다.

CSRF 공격의 예

은행 웹사이트에서 간단한 GET 요청을 통한 송금을 허용하는 시나리오를 생각해 보세요.

Click here to win $1000!

피해자가 은행 계좌에 로그인한 상태에서 이 링크를 클릭하면 동의 없이 이체가 실행됩니다.

CSRF 공격 방지

CSRF 공격을 방지하기 위해 개발자는 다음과 같은 여러 전략을 구현할 수 있습니다.

1. 동기화 장치 토큰 패턴(CSRF 토큰)
2. SameSite 쿠키
3. 쿠키 이중 제출

1. 싱크로나이저 토큰 패턴(CSRF 토큰)

CSRF 공격을 방지하는 가장 효과적인 방법 중 하나는 CSRF 토큰을 사용하는 것입니다. CSRF 토큰은 서버에서 생성되어 클라이언트로 전송되는 고유하고 비밀이며 예측할 수 없는 값입니다. 이 토큰은 클라이언트의 모든 상태 변경 요청에 포함되어야 합니다.

단계별 구현:

1. CSRF 토큰 생성:

const generateCSRFToken = () => {
    return crypto.randomBytes(24).toString('hex');
};

2. CSRF 토큰을 클라이언트에게 보냅니다:

HTML 양식에서 CSRF 토큰을 숨겨진 필드로 포함합니다.

3. 서버에서 CSRF 토큰을 검증합니다:
서버 측에서 각 상태 변경 요청에 대해 토큰을 검증합니다.

const validateCSRFToken = (req, res, next) => {
    const token = req.body.csrf_token;
    if (token === req.session.csrfToken) {
        next();
    } else {
        res.status(403).send('CSRF validation failed');
    }
};

2. SameSite 쿠키

쿠키의 SameSite 속성은 사이트 간 요청과 함께 쿠키가 전송되는 방식을 제어하여 CSRF 공격을 완화할 수 있습니다.

res.cookie('session', 'value', { sameSite: 'Strict' });

3. 쿠키 이중 제출

이중 제출 쿠키 방법에는 CSRF 토큰을 쿠키와 요청 매개변수로 보내는 것이 포함됩니다.

단계별 구현:

1. CSRF 토큰을 쿠키로 설정합니다:

res.cookie('csrfToken', csrfToken, { httpOnly: true });

** 요청에 토큰 포함: **

** 3. 서버에서 토큰을 검증합니다: **

const validateCSRFToken = (req, res, next) => {
    const token = req.cookies.csrfToken;
    const bodyToken = req.body.csrf_token;
    if (token && token === bodyToken) {
        next();
    } else {
        res.status(403).send('CSRF validation failed');
    }
};

결론

교차 사이트 요청 위조(CSRF)는 웹 애플리케이션의 보안을 손상시킬 수 있는 심각한 위협입니다. CSRF 공격의 작동 방식을 이해하고 CSRF 토큰, SameSite 쿠키, 이중 제출 쿠키와 같은 강력한 예방 기술을 구현함으로써 이러한 일반적인 취약점으로부터 애플리케이션과 사용자를 보호할 수 있습니다. 안전하고 보안이 유지되는 사용자 경험을 보장하려면 개발 프로세스에서 항상 보안 모범 사례를 우선시하세요.

지금 JavaScript 애플리케이션에 이러한 CSRF 방지 기술을 구현하고 사용자 데이터를 보호하세요. 아래 댓글로 여러분의 생각과 경험을 공유해 주세요. 더 많은 웹 보안 팁과 요령을 보려면 팔로우하는 것을 잊지 마세요!

릴리스 선언문 이 기사는 https://dev.to/rigalpatel001/understanding-and-preventing-cross-site-request-forgery-csrf-in-javascript-2ne0?1에 복제되어 있습니다. 침해가 있는 경우에는 Study_golang@163으로 문의하시기 바랍니다. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3