[Javascript] XSS(Cross-Site Scripting), CSRF(Cross-Site Request Forgery)
XSS (Cross-Site Scripting)
XSS는 웹 애플리케이션에서 악의적인 스크립트를 삽입하는 공격 기법입니다.
공격자는 이러한 스크립트를 사용하여 다른 사용자의 브라우저에서 악의적인 코드를 실행할 수 있습니다.
종류
XSS 공격은 주로 세 가지 종류가 있습니다:
- 저장된 XSS (Stored XSS): 악성 스크립트가 서버에 저장되고, 다른 사용자가 해당 데이터를 요청할 때마다 스크립트가 실행됩니다.
- 반사된 XSS (Reflected XSS): 악성 스크립트가 즉시 서버로부터 반사되어 브라우저에서 실행됩니다. 일반적으로 URL이나 폼 데이터를 통해 전달됩니다.
- DOM 기반 XSS (DOM-based XSS): 클라이언트 측 코드에서 DOM(Document Object Model)을 수정하여 발생하는 XSS 공격입니다.
예시
웹사이트의 댓글 기능이 있다고 가정해보겠습니다.
저장된 XSS의 경우, 공격자는 댓글에 악성 스크립트를 삽입할 수 있습니다.
<script>alert('악성 스크립트가 실행되었습니다!');</script>
다른 사용자가 해당 페이지를 방문할 때마다, 삽입된 스크립트가 실행됩니다.
예방 방법
- 입력 검증: 사용자 입력을 철저히 검증하고 필터링합니다.
- 출력 인코딩: 사용자 입력을 출력할 때 HTML 인코딩을 적용합니다.
- Content Security Policy (CSP): CSP를 사용하여 브라우저가 승인된 스크립트만 실행하도록 설정합니다.
- Sanitizing: 데이터를 정리(세니타이즈)할 수 있습니다. 이는 악성 스크립트를 제거하거나 무해한 문자열로 변환하는 작업입니다.
CSRF (Cross-Site Request Forgery)
CSRF는 사용자가 의도하지 않은 요청을 수행하도록 만드는 공격 기법입니다.
공격자는 피해자가 인증된 세션을 사용하여 원치 않는 액션을 수행하도록 유도할 수 있습니다.
크로스 사이트 요청 위조(CSRF)는 인증된 사용자가 웹 애플리케이션에 특정 요청을 보내도록 유도하는 공격 행위를 말합니다. 크로스 사이트 요청 위조는 생성된 요청이 사용자의 동의를 받았는지 확인할 수 없는 웹 애플리케이션의 CSRF 취약점을 이용합니다. 공격자의 요청이 사용자의 요청인 것처럼 속이는 공격 방식이기에 크로스 사이트 요청 위조라는 명칭이 붙었습니다.
크로스 사이트 요청 위조는 사용자가 인증한 세션에서 웹 애플리케이션이 정상적인 요청과 비정상적인 요청을 구분하지 못하는 점을 악용하는 공격 방식으로, 웹 애플리케이션이 사용자의 요청이 실제 사용자가 전송한 것인지 확인하지 않는 경우에 자주 발생합니다.
예시
사용자가 은행 웹사이트에 로그인한 상태에서 공격자가 만든 악의적인 웹페이지를 방문했다고 가정해보겠습니다.
이 페이지에는 자동으로 돈을 이체하는 폼이 포함되어 있습니다.
<img src="https://bank.com/transfer?amount=1000&to=attacker_account" style="display:none;">
사용자가 페이지를 방문하면, 해당 요청이 자동으로 은행 서버에 전송되고, 사용자의 계정에서 돈이 이체됩니다.
예방 방법
- CSRF 토큰 사용: 각 요청에 고유한 토큰을 포함시켜 요청이 유효한지 확인합니다.
- Referer 검사: 서버에서 요청의 Referer 헤더를 검사하여, 출처를 확인하여 신뢰할 수 있는 도메인에서 온 요청만 처리합니다.
- SameSite 쿠키 속성 설정: 쿠키의 SameSite 속성을 설정하여 크로스 사이트 요청 시 쿠키가 전송되지 않도록 합니다.
차이
크로스 사이트 스크립팅(XSS)과 크로스 사이트 요청 위조는 사용자의 브라우저를 대상으로 한다는 공통점이 있습니다.
- 하지만 크로스 사이트 요청 위조는 사용자의 인증된 세션을 악용하는 공격 방식인 반면, 크로스 사이트 스크립팅은 인증된 세션 없이도 공격을 진행할 수 있다는 차이점이 있습니다.
- 크로스 사이트 스크립팅은 사용자가 특정 사이트를 신뢰한다는 사실을 이용한 공격 방식이지만, 크로스 사이트 요청 위조는 웹 애플리케이션이 인증된 사용자의 요청을 신뢰한다는 사실을 이용한 공격 방식입니다.
- 또한 크로스 사이트 스크립팅은 사용자에서 스크립트가 실행되지만 크로스 사이트 요청 위조는 서버에서 스크립트가 실행된다는 차이점이 있습니다.
- 마지막으로 크로스 사이트 스크립팅과 크로스 사이트 요청 위조의 목적에도 차이가 있습니다. 크로스 사이트 스크립팅은 사용자 PC에서 스크립트를 실행해 사용자의 정보를 탈취하는 것을 목적으로 하는 반면, 크로스 사이트 요청 위조는 요청을 위조함으로써 사용자 몰래 송금과 제품 구입 등 특정 행위를 수행하는 것을 목적으로 합니다.
요약
- XSS는 악의적인 스크립트를 웹 페이지에 삽입하여 다른 사용자의 브라우저에서 실행되도록 하는 공격 기법입니다. 이를 방지하기 위해서는 입력 검증, 출력 인코딩, CSP 설정 등이 필요합니다.
- CSRF는 사용자가 의도하지 않은 요청을 수행하도록 만드는 공격 기법입니다. 이를 방지하기 위해서는 CSRF 토큰 사용, Referer 검사, SameSite 쿠키 설정 등이 필요합니다.
이와 같은 보안 공격 기법들을 잘 이해하고, 적절한 방어 전략을 사용하여 웹 애플리케이션의 보안을 강화해야 합니다.
참조!
https://nordvpn.com/ko/blog/csrf/
'javascript' 카테고리의 다른 글
[Javascript] at(), slice(), splice() (1) | 2024.05.17 |
---|---|
[Javascript] New URL(), New URLSearchParams() (0) | 2024.05.17 |
[Javascript] NanoId, @faker-js/faker (더미데이터 만들기) (0) | 2024.04.30 |
[Javascript] ESLint (.eslintrc) (1) | 2024.04.26 |
[Javascript] 진법 변환 (toString(), parseInt()) (0) | 2024.04.23 |
댓글