[모의해킹 스터디] 10주차 정리

바울·2024년 12월 28일
0

모의해킹 스터디

목록 보기
26/40

DOM Based XSS (Cross-Site Scripting)?

DOM Based XSS는 XSS(Cross-Site Scripting)의 한 종류로, 클라이언트 측에서 실행되는 자바스크립트 코드가 악의적인 입력을 처리하면서 발생하는 취약점입니다. DOM(Document Object Model)을 조작하는 코드에서 사용자 입력을 적절히 검증하지 않으면 공격자가 악성 스크립트를 삽입하여 실행할 수 있습니다.

1. DOM Based XSS의 특징

  • 클라이언트 측에서 발생: 서버와 상관없이 브라우저 내에서 실행되는 코드에서 취약점이 발생합니다.

  • DOM 조작: 자바스크립트 코드가 DOM 요소를 조작하거나 값을 동적으로 생성하는 과정에서 사용자 입력이 제대로 검증되지 않은 경우 취약점이 발생합니다.

  • HTTP 요청 필요 없음: 서버 요청이나 응답이 필요하지 않으며, 단순히 URL, 브라우저 히스토리, 또는 클라이언트 측 저장소(예: LocalStorage) 등을 통해 입력이 전달될 수 있습니다.

2. DOM Based XSS의 주요 원인

  1. 신뢰할 수 없는 데이터 사용: 사용자 입력을 DOM에 직접 삽입하거나 자바스크립트에서 동적으로 실행할 때 검증 없이 사용하는 경우.

  2. JavaScript의 위험한 메서드: innerHTML, document.write, eval, setTimeout, setInterval 등의 메서드 사용 시.

  3. 동적 URL 매개변수 처리: URL의 쿼리 파라미터 또는 해시 값이 DOM 요소에 삽입되는 경우.

3. DOM Based XSS의 공격 예시

<!DOCTYPE html>
<html>
<head>
    <title>DOM Based XSS Example</title>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const param = new URLSearchParams(window.location.search);
            const userInput = param.get('input');
            document.getElementById('output').innerHTML = userInput;
        });
    </script>
</head>
<body>
    <h1>DOM Based XSS Test</h1>
    <div id="output"></div>
</body>
</html>

공격 시나리오

http://example.com/?input=<script>alert('XSS')</script>
  • 위 URL을 사용자가 열면 innerHTML을 통해 DOM에 삽입되며 스크립트가 실행됩니다.

4. DOM Based XSS 방지 방법

  1. 출력 시 인코딩 적용: HTML, JavaScript, URL, CSS 등 특정 컨텍스트에 맞는 적절한 인코딩을 사용합니다.

HTML 인코딩: &, <, >, " 등을 안전한 엔티티로 변환.

  1. DOM API 안전하게 사용: innerText, textContent와 같은 안전한 메서드를 사용하여 DOM에 데이터를 삽입합니다.
document.getElementById('output').textContent = userInput;
  1. Content Security Policy(CSP) 적용: 스크립트 실행을 제어하여 악성 스크립트 실행 가능성을 줄입니다.

  2. 라이브러리 사용: DOMPurify와 같은 라이브러리를 사용하여 신뢰할 수 없는 입력을 안전하게 처리합니다.

0개의 댓글