크로스 사이트 스크립팅 (XSS) - script tag

Cross-site Scripting (XSS)

설명

크로스 사이트 스크립팅(XSS)은 외부에서 제어 가능한 값이 태그 안에 사용될 때 발생하는 취약점입니다. 이 취약점이 존재할 경우, 공격자가 악의적인 스크립트 코드를 삽입하여 사용자의 브라우저에서 실행시킬 수 있습니다. 결과적으로, 악성 스크립트로 인해 사용자의 세션 쿠키 탈취, 사이트 내 공격자 권한 상승, 피싱 등이 발생할 수 있습니다.

잠재적 영향

  • 세션 탈취 (세션 하이재킹): 공격자가 사용자의 인증 정보를 탈취할 수 있습니다.

  • 악성 코드 실행 (클라이언트 공격): 사용자의 브라우저에서 임의의 스크립트를 실행할 수 있습니다.

  • 피싱 공격 (신뢰도 하락): 정상 사이트에서 악성 팝업, 입력 폼 등으로 사용자를 속일 수 있습니다.

해결 방법

  • 사용자 입력값을 반드시 이스케이프(escape) 또는 필터링(filtering) 처리하세요.

  • 태그 콘텐츠에 외부 입력값을 직접 넣지 마세요.\

  • 라이브러리나 프레임워크에서 제공하는 XSS 방지 함수(e.g. DOMPurify, lodash.escape 등)를 사용하세요.

  • 가능하다면, 정해진 값 또는 HTML 템플릿 엔진의 안전 모드만 활용하세요.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 위 예시는 사용자 입력값을 별도의 검증이나 이스케이프 처리 없이 태그 내부에 삽입합니다. 이로 인해 공격자가 <script>alert(document.cookie) 와 같이 입력할 경우 브라우저에서 바로 위험한 코드가 실행될 수 있습니다.

  • 안전한 코드: 수정된 예시에서는 사용자 값을 태그에 사용하지 않고 지정된 문구를 매핑하여 사용하도록 합니다. 이로 인해 악의적인 스크립트 삽입이 불가능하고, XSS 공격을 방지할 수 있습니다.

참조

Last updated