0. 개요
프론트엔드 개발자로 취업을 하기 위해 면접을 준비 중 생소한 단어가 나와서 블로그에 정리하게 되었습니다.
면접의 질문은 아래의 zero-base 사이트를 참고하였습니다.
현직 개발자가 정리해주는 프론트엔드 기술 면접 필수 질문, 답변 20선 (feat. 전 카카오 엔터프라
신입 개발자라면 반드시 준비해야 할 프론트엔드 기술면접 질문+답변
zero-base.co.kr
CSRF(Cross-Site Request Forgery)와 XSS(Cross-Site Scripting)는 웹 보안의 두 가지 주요 공격 유형입니다. 이들은 각각 다른 방식으로 웹 애플리케이션의 취약점을 이용합니다.
1. CSRF(Cross-Site Request Forgery) 공격이란
사용자가 로그인하여 인증된 상태에서 특정 요청을 전송하면 애플리케이션은 그 요청을 합법적인 사용자의 행위로 간주합니다. 그래서 인증된 상태로 패스워드 변경, 이메일 주소 변경, 자금 이체 등을 통해서 이득을 취하는 공격입니다.
작동 방식
- 공격자는 악의적인 링크, 이미지, 사이트 등을 생성합니다.
- 사용자가 해당 링크를 클릭하거나 악의적인 사이트를 방문할 때, 사용자의 브라우저는 자동으로 공격자가 준비한 악의적인 요청을 해당 웹 애플리케이션에 전송합니다.
- 웹 애플리케이션은 이 요청을 사용자의 정상적인 요청으로 오인하고, 공격자의 의도대로 작업을 수행합니다.
2. CSRF 공격 막는 방법
- CSRF 토큰 사용: 가장 일반적인 방법입니다. 사용자의 세션에 유니크한 토큰을 생성하여 매 요청마다 토큰을 보내서 검증합니다.
- SameSite 쿠키 속성 설정: 최신 브라우저는 쿠키에 SameSite 속성을 설정할 수 있습니다. 쿠키가 완전히 같은 사이트에서만 전송되도록 합니다.
- 사용자의 동작을 검증: 중요한 요청에 대해서는 사용자의 추가적인 동의를 얻는 것이 좋습니다. 예를 들어, 비밀번호 변경 시 추가적인 비밀번호 확인이나 이메일로 확인 절차를 요구할 수 있습니다.
3. XSS(Cross-Site Scripting) 공격이란
XSS 공격은 공격자가 게시판이나 웹 메일 등 JavaScript 같은 스크립트 코드를 삽입하여, 다른 사용자의 브라우저에서 그 스크립트가 실행되게 하는 공격입니다.
이를 통해 공격자는 사용자의 개인정보 및 세션쿠키를 탈취하거나, 사용자를 대신하여 악의적인 행위를 수행하거나, 악성코드 감염 등을 시킬 수 있습니다.
작동 방식
- 공격자는 취약한 웹 애플리케이션에 사용자 입력 필드를 통해 악의적인 스크립트를 삽입합니다.
- 다른 사용자가 이 취약한 페이지를 방문할 때, 삽입된 악의적인 스크립트가 사용자의 브라우저에서 실행됩니다.
- 이 스크립트를 통해 공격자는 사용자의 세션쿠키를 탈취하거나, 사용자의 행동을 조작하거나, 가짜 정보를 표시할 수 있습니다.
4. XSS 공격 막는 방법
- 데이터 산정: 사용자로부터 입력받은 모든 데이터에 대해 HTML, JavaScript 등을 비활성화하는 것이 중요합니다. 예를 들어, HTML 태그를 사용하지 못하게 하는 등의 처리가 필요합니다.
- 콘텐츠 보안 정책(CSP): CSP는 웹 브라우저에 어떤 외부 리소스가 실행되거나 불러와질 수 있는지를 제어하는 보안 표준입니다. CSP를 사용하면 XSS 공격을 효과적으로 방어할 수 있습니다.
- HTTPOnly 쿠키 사용: 쿠키에 HTTPOnly 속성을 설정하면, JavaScript를 통한 쿠키의 접근을 막을 수 있습니다.
5. 면접 답변
CSRF 공격을 막기위해서는 CSRF 토큰을 생성해서 매 요청마다 헤더에 담아서 보내거나, 쿠키의 SameSite 설정을 통해 완전히 동일한 사이트에서만 요청을 보내도록 하여 막습니다.
XSS 공격을 막기위해서는 HTML, JavaScript 등을 비활성화하여 비정상적인 스크립트 실행을 막거나, CSP정책을 설정하여 외부 리소스가 불러오거나 실행되는 것을 막을 수 있습니다. 또한 쿠키의 HTTPOnly 설정을 하여 JavaScript를 통한 쿠키의 접근을 막을 수 있습니다.
'면접' 카테고리의 다른 글
[면접] 호이스팅(Hoistin)에 대해 설명해보세요. (0) | 2024.04.11 |
---|---|
[면접] 브라우저 렌더링 원리에 대해서 설명해보세요. (0) | 2024.04.10 |
[면접] async/await에 대해 설명해보세요. + promise란 (0) | 2024.04.09 |
[면접] API, REST, REST API, RESTful API 차이점은 무엇인가 (0) | 2024.04.05 |
2. 네트워크 (0) | 2023.06.26 |
댓글