크로스사이트 스크립팅 (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