← 목록

XSS 공격을 막는 JavaScript 보안 팁

작성: 2024년 06월 24일읽기: 약 3분

웹 개발을 하다 보면, 보안은 항상 중요한 주제 중 하나입니다. 특히, 웹 사이트가 사용자로부터 정보를 받을 때, 그 정보를 악용하는 공격 중 하나가 바로 Cross-Site Scripting, 즉 XSS 공격입니다. 이 글에서는 XSS 공격을 막기 위한 몇 가지 JavaScript 보안 팁을 공유하려고 합니다.

XSS 공격이란?

간단히 말해서, XSS 공격은 악의적인 스크립트가 사용자의 웹 브라우저에서 실행되게 만드는 보안 취약점을 이용하는 것입니다. 이렇게 되면, 공격자는 사용자의 세션 토큰이나 쿠키를 훔치는 등의 행위를 할 수 있습니다.

JavaScript를 이용한 방어 기법

1. 사용자 입력값 검증

사용자로부터 입력 받은 모든 데이터는 검증되어야 합니다. 예를 들어, HTML 태그를 입력값으로 받지 않도록 필터링하는 것이 좋습니다.

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

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

웹 페이지의 <head> 태그 안에 콘텐츠 보안 정책을 설정함으로써, XSS 공격을 방어할 수 있습니다. CSP는 브라우저에게 어떤 외부 자원이 안전한지 알려주는 역할을 합니다.

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'none';">

3. 쿠키에 HttpOnly와 Secure 플래그 설정

쿠키에 HttpOnly와 Secure 플래그를 설정하면, JavaScript를 통한 쿠키 접근을 방지하고, 데이터가 암호화된 연결을 통해서만 전송되도록 할 수 있습니다.

document.cookie = "username=JohnDoe; Secure; HttpOnly";

4. DOM 기반 XSS 방지

DOM을 조작할 때는 항상 주의해야 합니다. innerHTML 대신 textContent를 사용하거나, 사용자 입력을 DOM에 추가하기 전에 적절히 필터링하는 것이 좋습니다.

document.getElementById("userInput").textContent = sanitizeInput(userInput);

결론

XSS 공격은 웹 개발에서 흔히 마주치는 보안 위협 중 하나입니다. 하지만 위에서 언급한 몇 가지 팁을 통해, 웹 애플리케이션을 더 안전하게 만들 수 있습니다. 사용자로부터 받은 데이터를 항상 검증하고, 콘텐츠 보안 정책을 설정하며, 쿠키 설정에 주의를 기울이는 것이 중요합니다. 보안은 웹 개발의 중요한 부분이므로, 항상 최신의 보안 관련 지식을 업데이트하고 적용하는 것이 좋습니다.