XSS란?
Cross Site Scripting
즉, 웹 사이트의 어드민(관리자)이 아닌 악의적인 목적을 가진 제 3자가 악성 스크립트를 삽입하여 의도하지 않은 명령을 실행시키거나 세션 등을 탈취할 수 있는 취약점입니다.
이로 인한 위험성
- 쿠키 및 세션정보 탈취
- 악성 프로그램 다운 유도
- 의도하지 않은 페이지 노출
공격 종류
● Reflected XSS : 반사형 크로스사이트스크립트
- 공격자가 악성 스크립트를 클라이언트에게 직접 전달하여 공격하는 방식입니다.
특히 URL에 스크립트를 포함시켜 공격하는 경우가 대표적이며 URL이 길면 클라이언트가 의구심을 가질 수 있기 때문에 Shorten URL(URL 단축)을 이용해 짧은 URL로 만들어 공격하기도 합니다.
서버에 스크립트를 저장하지 않기 때문에 서버에서 이루어지는 필터링을 피할 수 있는 공격 방식입니다.
● Stored XSS : 저장형 크로스사이트 스크립트
- 공격자가 악성 스크립트를 서버에 저장시킨 다음 클라이언트의 요청/응답 과정을 통해 공격하는 방식입니다.
여기서 스크립트를 서버에 저장하는 행위는 게시글 쓰기 등의 행동을 지칭합니다.
보통 서버에서 필터링을 하기 때문에 공격을 우회하기 어렵지만 한 번 성공하면 관리자 입장에서는 눈치채기 힘들고 광범위한 피해를 줄 수 있다는 것이 특징입니다.
● DOM Based XSS : DOM 기반 크로스사이트 스크립트
- 피해자의 브라우저가 html 페이지를 분석하여 DOM을 생성할 때 악성 스크립트가 DOM의 일부로 구성되어 생성되는 공격입니다. 서버의 응답 내에는 악성 스크립트가 포함되지 않지만 브라우저의 응답 페이지에 정상적인 스크립트가 실행되면서 악성 스크립트가 추가되서 실행되는 특징이 있습니다.
- DOM(Document Object Model, 문서 객체 모델)
- : 브라우저가 웹 페이지를 렌더링 하는데 사용하는 모델로 HTML 및 XML 문서에 접근하기 위한 인터페이스
- DOM(Document Object Model, 문서 객체 모델)
XSS 취약점 보안 대책
- HTML 엔티티 변환 (Escape 처리) ⇒ 기본적인 방어
- 문제 상황 : 사용자가 <script>alert('XSS')</script> 같은 코드를 입력하면 스크립트가 실행 ❌
- 특수문자를 HTML 엔티티로 변환하여 브라우저가 코드로 해석하지 못하게 막음!.
문자 변환된 엔티티 < < > > " " ' ' - CSP(Content Security Policy) 적용 ⇒ 브라우저 레벨에서 방어
- 브라우저가 외부 스크립트 실행을 아예 차단하도록 설정함.
- HTML, JavaScript 인코딩이 뚫려도 브라우저가 보호
Content-Security-Policy: default-src 'self'; - whiteList 필터링 ⇒ 가장 강력한 방어
- 허용된 값만 사용할 수 있도록 제한하는 방식입니다.
- 허용 된 것만 남기므로 보안성이 좋음
- 사용자 입력을 제한하면서도 일부 HTML 허용
- 라이브러리를 활용하면 쉽고 강력한 보안 적용 가능
import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;
public class XSSWhiteListExample {
public static void main(String[] args) {
String unsafeInput = "<script>alert('XSS');</script><b>안전한 텍스트</b><p>허용된 문장</p>";
// 화이트리스트 필터링: <b>, <i>, <p> 태그만 허용
String safeOutput = Jsoup.clean(unsafeInput, Whitelist.basic());
System.out.println(safeOutput);
}
}
//결과 : <b>안전한 텍스트</b><p>허용된 문장</p>
//<script>태그 제거, <b>,<p> 태그 허용
'CS 준비' 카테고리의 다른 글
| [네트워크]CORS란? (0) | 2025.02.10 |
|---|---|
| [네트워크]SOP란? (0) | 2025.02.10 |
| 서브넷 마스크 & 게이트웨이 (0) | 2025.02.10 |
| [네트워크]로드밸런서가 무엇인가요? (0) | 2025.02.10 |
| [네트워크]DNS란? (0) | 2025.02.10 |