Auto escape 비활성로 인한 크로스 사이트 스크립팅 (XSS)
Cross-Site Scripting (XSS)
설명
크로스 사이트 스크립팅(XSS)은 외부 입력값이 HTML 페이지에 필터링 없이 출력될 때 발생하는 취약점입니다. JSF(JavaServer Faces)에서 'escape="false"'를 사용하면 사용자 입력값이 HTML 특수문자로 escape되지 않아 악의적인 스크립트가 실행될 수 있습니다. 공격자가 자바스크립트와 같은 코드를 삽입해 사용자의 쿠키 탈취나 세션 하이재킹, 피싱 공격 등을 할 수 있습니다.
잠재적 영향
정보 유출(개인정보, 인증정보 등): 공격자가 악의적인 스크립트로 쿠키, 세션 등을 탈취할 수 있습니다.
사용자 권한 탈취: 피해자의 계정으로 공격자가 동작할 수 있습니다.
악성 행위(피싱 등): 사용자가 악성 사이트로 리디렉션될 수 있습니다.
해결 방법
escape 속성을 기본값(true)로 사용합니다(escape="false"를 사용하지 않습니다).
외부 입력값을 출력할 때는 항상 HTML 특수문자를 자동으로 escape 처리합니다.
외부 입력 데이터가 HTML로 출력될 경우, 꼭 필요한 경우가 아니라면 escape를 비활성화하지 않습니다.
보안 취약점 진단 툴을 사용해 escape="false"가 사용된 부분을 주기적으로 점검합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: escape="false"로 설정하면 사용자 입력값이 그대로 HTML에 출력되어, 스크립트 삽입 공격(XSS)에 쉽게 노출됩니다.
안전한 코드: escape 속성의 기본값(true)로, 사용자 입력에 포함된 HTML, 스크립트 태그 등이 자동으로 변환되어 악의적인 코드 실행을 방지할 수 있습니다.
참조
Last updated