웹 보안에서 XSS(Cross Site Scripting)와 CSRF(Cross Site Request Forgery) 공격은 매우 중요한 이슈입니다. 이 두 가지 공격 방식은 웹사이트와 사용자 간의 신뢰를 저하시키며, 보안 취약점을 초래할 수 있습니다. 이번 글에서는 XSS와 CSRF의 정의, 공격 방식, 방어 방법에 대해 알아보겠습니다.
XSS 공격의 정의와 종류
XSS란?
XSS는 웹사이트의 취약점을 이용하여 악의적인 스크립트를 삽입하는 공격입니다. 사용자가 입력한 내용이 웹사이트에 그대로 반영되는 경우 발생합니다. XSS는 크게 세 가지 유형으로 나눌 수 있습니다.
XSS 공격의 종류
-
Stored XSS (저장형 XSS)
사용자가 웹 서버에 악성 스크립트를 입력하고, 다른 방문자가 해당 페이지를 열 때 이 스크립트가 실행됩니다. 이는 스크립트가 서버에 저장되어 여러 사용자에게 영향을 미칠 수 있는 방식입니다. -
Reflected XSS (반사형 XSS)
사용자의 입력값이 즉시 웹 페이지에 반영되어 공격하는 방식입니다. 주로 URL, 검색 쿼리, 에러 메시지 등을 통해 악성 스크립트를 전달하고 실행합니다. -
DOM-based XSS (DOM 기반 XSS)
Document Object Model을 이용하여 악성 스크립트를 삽입하는 방식입니다. 검증되지 않은 입력값이 자바스크립트를 통해 DOM에 접근할 때 발생합니다.
XSS 공격 방법
XSS 공격에는 여러 가지 방식이 있습니다. 다음은 주요 공격 예시입니다.
- Script 태그 사용:
<script>alert("XSS");</script>와 같은 방식으로 공격합니다. - JavaScript URL 사용:
<a href="javascript:alert('XSS');">XSS</a>형태로 스크립트를 실행합니다. - onerror 이벤트 활용:
<img src="http://example.com/404.png" onerror="alert('XSS');" />와 같이 이미지 로드 실패 시 실행됩니다. - 블랙리스트 우회: 특정 태그를 우회하여 악성 스크립트를 실행할 수 있습니다.
- 난독화 기법 사용:
<a href="javas
cript
:
alert
('XSS')">XSS</a>와 같은 방법으로 공격합니다.
XSS 공격 방어 방법
XSS 공격을 방어하기 위한 방법은 다음과 같습니다.
-
입력값 검증
사용자의 입력값을 검증하여 악의적인 스크립트가 실행되지 않도록 합니다. 블랙리스트와 화이트리스트 방식을 사용할 수 있으며, 일반적으로 화이트리스트 방식을 추천합니다. -
HTTPOnly 쿠키 설정
HTTPOnly 쿠키를 사용하면 자바스크립트에서 쿠키에 접근할 수 없어 XSS 공격을 방어할 수 있습니다. -
Content Security Policy (CSP)
CSP는 웹 페이지에서 로드할 수 있는 리소스의 종류를 제한하여 XSS 공격을 방지하는 보안 방식입니다.
CSRF 공격의 정의와 예시
CSRF란?
CSRF는 사용자가 의도하지 않은 요청을 웹사이트에 전송하게 만드는 공격입니다. 공격자는 사용자의 세션을 이용하여 악의적인 행위를 수행할 수 있습니다.
CSRF 공격 예시
공격자는 다음과 같은 코드를 작성하여 웹사이트에 삽입합니다.
<form action="http://example.com/transfer" method="POST">
<input type="hidden" name="account" value="1234567890" />
<input type="hidden" name="amount" value="1000000" />
<input type="submit" value="송금하기" />
</form>
사용자가 이 코드를 클릭하면, 의도치 않게 송금 요청이 이루어집니다.
CSRF 공격 방어 방법
CSRF 공격을 방어하기 위한 방법으로는 다음과 같은 것들이 있습니다.
-
Referer 검증
요청을 보낸 웹사이트의 주소를 검증하여 공격을 차단합니다. 그러나 이 방법은 툴을 사용하면 쉽게 우회될 수 있습니다. -
CSRF 토큰 사용
요청 시 CSRF 토큰을 함께 보내고, 서버에서 이를 검증하여 요청의 유효성을 확인합니다. -
GET/POST 요청 구분하기
GET 방식은 CSRF 공격에 취약하므로, POST 방식으로 요청하는 것이 좋습니다. -
추가 인증
CAPTCHA나 OTP와 같은 추가 인증 절차를 통해 사용자가 요청을 보내기 전에 인증을 요구합니다.
자주 묻는 질문
질문1: XSS 공격의 주요 원인은 무엇인가요?
XSS 공격의 주요 원인은 웹 애플리케이션의 입력값 검증 부족과 사용자 입력을 신뢰하는 것입니다.
질문2: CSRF 공격 방어를 위한 가장 효과적인 방법은 무엇인가요?
CSRF 토큰을 사용하는 방법이 가장 효과적이며, Referer 검증과 함께 사용하면 더욱 안전합니다.
질문3: XSS와 CSRF 공격의 차이는 무엇인가요?
XSS는 사용자의 브라우저에서 악성 스크립트를 실행하는 반면, CSRF는 사용자의 세션을 이용하여 악의적인 요청을 보내는 방식입니다.
질문4: CSP는 어떻게 설정하나요?
CSP는 HTTP 헤더를 통해 설정할 수 있으며, 웹 서버 설정에서 각종 리소스의 로드를 제어하는 정책을 정의합니다.
질문5: XSS 방어를 위해 화이트리스트 방식을 사용하는 이유는 무엇인가요?
화이트리스트 방식은 허용된 문자나 태그만을 사용하므로, 블랙리스트 우회 공격을 방지하는 데 효과적입니다.