← 목록

XSS 공격으로부터 안전한 웹 개발을 위한 10가지 방법 🛡️

작성: 2025년 09월 24일읽기: 약 4분

웹 개발을 하다 보면, 우리의 웹사이트가 다양한 공격에 노출될 수 있습니다. 그 중에서도 Cross-Site Scripting, 즉 XSS 공격은 매우 흔하게 발생합니다. 이런 공격으로부터 웹사이트를 보호하기 위해, 여러분이 쉽게 따라 할 수 있는 10가지 방법을 소개합니다.

1. 사용자 입력 검증

사용자로부터 입력 받은 데이터는 항상 검증해야 합니다. 예를 들어, 스크립트 태그(<script>)나 SQL 명령어 같은 것들이 포함되어 있지 않은지 확인하세요.

<!-- 잘못된 입력 예시 -->
<input type="text" name="username" value="<script>alert('XSS');</script>">

2. 데이터 살균(Sanitization)

사용자로부터 받은 데이터를 웹 페이지에 출력하기 전에, 위험한 문자들을 안전한 형태로 변환하세요. 예를 들어, <&lt;로, >&gt;로 변환합니다.

function sanitize(input) {
    return input.replace(/</g, "&lt;").replace(/>/g, "&gt;");
}

3. 콘텐츠 보안 정책(CSP)

웹사이트의 헤더에 콘텐츠 보안 정책을 설정하여, 어떤 종류의 스크립트가 실행될 수 있는지 제한하세요. 예를 들어, 자신의 도메인에서만 스크립트를 허용하도록 설정할 수 있습니다.

Content-Security-Policy: script-src 'self'

4. 쿠키에 HttpOnly 플래그 사용

쿠키에 HttpOnly 플래그를 설정하면, 자바스크립트를 통해 쿠키에 접근하는 것을 막을 수 있습니다. 이는 XSS 공격을 통한 세션 탈취를 방지하는 데 도움이 됩니다.

Set-Cookie: sessionId=abc123; HttpOnly

5. 입력 길이 제한

사용자로부터 받는 입력의 길이를 제한하여, 공격자가 긴 스크립트 코드를 삽입하는 것을 방지하세요.

6. 라이브러리와 프레임워크 최신 유지

사용하는 라이브러리와 프레임워크는 항상 최신 버전으로 유지하세요. 보안 취약점이 발견되면, 개발자들은 이를 수정한 새 버전을 릴리스합니다.

7. URL 인코딩 사용

URL에서 사용자 입력을 사용할 때는, URL 인코딩을 사용하여 안전하게 만드세요. 이는 특정 문자를 % 뒤에 오는 두 자리 16진수로 변환하는 방법입니다.

const safeURL = encodeURI(userInput);

8. DOM 기반 XSS 방지

DOM을 직접 조작할 때는, 사용자 입력을 안전하게 처리하세요. 예를 들어, innerText 속성을 사용하여 사용자 입력을 텍스트로만 취급하게 하여, 스크립트가 실행되지 않도록 합니다.

document.getElementById("userInput").innerText = userInput;

9. 외부 스크립트의 안전성 확인

외부에서 가져오는 스크립트는 항상 신뢰할 수 있는 출처에서만 가져오세요. 또한, 가능하다면 Subresource Integrity(SRI)를 사용하여, 스크립트가 변경되지 않았는지 검증하세요.

<script src="https://example.com/script.js" integrity="sha384-oqVuAfXRKap7fdgcCY5..." crossorigin="anonymous"></script>

10. 정기적인 보안 검사

마지막으로, 정기적으로 웹사이트의 보안을 검사하여, 새로운 취약점이 없는지 확인하세요. 여러 온라인 도구를 사용하여 웹사이트를 스캔할 수 있습니다.

이러한 방법들을 통해, 여러분의 웹사이트를 XSS 공격으로부터 보호할 수 있습니다. 웹 개발은 끊임없이 변화하고 있으니, 항상 새로운 보안 위협에 대해 알아보고 대비하는 것이 중요합니다.