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