CSRF와 XSS

GJ·2023년 5월 10일
0

프론트엔드지식

목록 보기
14/14

CSRF(Cross-Site Request Forgery)

CSRF(Cross-Site Request Forgery)는 웹사이트 취약점 공격의 일종으로, 악의적인 사용자가 인증된 사용자의 권한을 사용하여 원치 않는 작업(예: 글 게시, 결제 등)을 수행하도록 하는 공격이다.
예를 들어, 사용자가 악성 웹사이트를 방문하고, 해당 웹사이트가 사용자가 이미 인증된 상태인 다른 웹사이트에 요청을 보내면, 해당 웹사이트는 사용자의 인증 정보를 인식하고 악의적인 요청을 정상적으로 처리할 수 있다.
즉, 나쁜놈이 악성 사이트를 만들어서 대신 로그인 처리를 한 뒤에 나쁜 짓을 하는 것이다.

CSRF 공격 방지

CSRF 공격을 방지하는 일반적인 방법은 다음과 같다.

  1. CSRF 토큰 사용: CSRF 공격은 보호하려는 페이지에 새로운 임의의 값을 생성하는 CSRF 토큰을 포함하도록 수정함으로써 방지할 수 있다. 토큰은 서버에서 생성하며, 요청이 수행될 때마다 요청과 함께 전송된다. 서버는 요청을 검증하여 해당 토큰이 존재하고 유효한지 확인하고, 그렇지 않으면 요청을 거부한다. 즉, 이것을 방지하기위한 또 다른 토큰을 만들자는 것

  2. SameSite 쿠키 속성 사용: SameSite 쿠키 속성은 쿠키가 언제나 같은 출처에서 요청되는지 확인한다. 이를 통해 브라우저가 외부 출처에서 전송되는 쿠키를 무시하도록 지시할 수 있다. 즉, 백엔드는 백엔드와 같은 서버에서 제공된 프론트의 요청만 받아들인다는 것

  3. Referrer 검증: Referrer 헤더를 검증하여 요청이 실제로 원래 출처에서 전송되었는지 확인할 수 있다. 이를 통해 외부 출처에서 전송되는 요청을 거부할 수 있다. 즉, 리다이렉트 등을 통해서 악성사이트를 들렸다 가게 하는 경우에, 바로왔는지 어딜 들려서 오는건지 확인하는 것

  4. 추가적인 인증 요구: 민감한 작업에 대한 추가적인 인증 요구를 구현함으로써 CSRF 공격을 방지할 수 있다. 이를 통해 사용자는 민감한 작업을 수행하기 전에 비밀번호 또는 다른 추가 정보를 제공해야한다. 즉, 중요한 작업 하기전에는 인증을 다시 한번 받게 하자는 것

XSS

XSS(Cross-Site Scripting)는 웹사이트 취약점 공격의 일종으로, 악의적인 사용자가 웹사이트에 악성 스크립트를 삽입하여 해당 스크립트를 실행하도록 하는 공격이다. 예를 들어, 악의적인 사용자가 웹사이트의 취약점을 이용하여 사용자의 브라우저에 스크립트를 삽입하면, 해당 스크립트는 사용자의 브라우저에서 실행된다. 이 스크립트를 이용하여 사용자의 쿠키 정보 등을 탈취할 수 있습니다.
즉, 나쁜놈이 우리 웹사이트에 기생하는 코드를 넣은 것이다.

CSRF 공격 방지

XSS 공격을 방지하기 위한 주요 방법은 다음과 같다.

  1. 입력 값 검증: 서버 측에서 입력 값을 검증하여, 스크립트 코드가 실행될 수 없도록 필터링한다.

  2. 출력 값 인코딩: 사용자로부터 입력 받은 값을 출력할 때, HTML 특수 문자를 인코딩하여 브라우저가 스크립트 코드를 인식하지 못하게 한다.

  3. 쿠키의 HttpOnly 속성 설정: 쿠키의 HttpOnly 속성을 설정하면, 브라우저에서 자바스크립트로 쿠키에 접근할 수 없다.

  4. 콘텐츠 보안 정책(CSP) 설정: CSP를 사용하여, 스크립트가 실행될 수 있는 출처를 제한할 수 있다.

  5. HTTPS 사용: HTTPS를 사용하여, 데이터를 암호화하고 중간자 공격을 방지할 수 있다.

이 외에도, 보안 관련 헤더를 설정하거나, 프레임 제한 등의 추가적인 보안 방법을 사용할 수 있다.

profile
Frontend Developer

0개의 댓글