크로스사이트 스크립팅 (XSS)

Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

설명

XSS는 웹 애플리케이션의 부적절한 입력 중립화로 인해 사용자 웹 브라우저에서 악의적인 스크립트가 실행될 수 있는 취약점입니다.

잠재적 영향

  • 보호 메커니즘 우회 (우회 공격 가능): 공격자가 악성 스크립트를 통해 사용자 개인 데이터를 탈취하거나 애플리케이션 보호 제한을 우회할 수 있습니다.

  • 애플리케이션 데이터 읽기 (데이터 유출 가능): 사용자 세션 쿠키 정보를 유출하거나 비인가 데이터에 접근할 수 있습니다.

  • 승인되지 않은 코드 실행 (시스템 손상 가능): 공격자가 브라우저 컨텍스트에서 임의의 코드를 실행해 피해를 유발할 수 있습니다.

해결 방법

  • 사용자 입력값의 유효성을 철저히 검증하십시오. HTML, JavaScript 등과 관련된 특수문자를 적절히 이스케이프 처리하십시오. 예를 들어, 특수문자를 HTML 엔티티로 변환하는 방법을 사용하세요.

  • 추가로 콘텐츠 보안 정책(CSP)을 설정하여 브라우저가 외부 스크립트 실행을 제한하도록 하여 추가 방어 로직을 적용할 수 있습니다.

  • Java Spring에서는 spring-security 모듈을 사용하여 XSS 공격을 방어할 수 있습니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

// 위험 코드 예문
@RequestMapping("/welcome")
@ResponseBody
public String welcomeMessage(@RequestParam String username) {
    // 사용자 입력을 바로 HTML로 반영
    return "<h1>Welcome, " + username + "!</h1>";
}

안전한 코드

설명:

  • 취약한 코드: 이 코드에서는 사용자 입력값 username을 HTML에 직접 삽입합니다. 악의적인 스크립트가 포함된 입력값이 전달되면, 해당 스크립트가 브라우저에서 실행될 위험이 있습니다.

  • 안전한 코드: 이 코드에서는 HtmlUtils.htmlEscape 메서드를 사용하여 사용자 입력값을 안전하게 이스케이프 처리합니다. 이를 통해 악성 스크립트가 HTML에 포함되어 브라우저에서 실행되지 않도록 방지할 수 있습니다.

관련 CVE

참조

Last updated