XSS(Cross Site Scripting)

✒️ 2025-05-16 09:08 내용 수정


악의적인 사용자가 웹 사이트에 악성 Script를 삽입할 수 있는 취약점


유형

  1. 비 지속적 기법(Non-persistent) / 반사형 XSS(Reflected XSS)
    • 가장 일반적인 웹 취약점 타입이다.
    • 웹 클라이언트로부터 제공된 HTTP query parameter와 같은 데이터가 server-side script에서 즉시 사용되어 결과 페이지로 보여지는 방식이다.
    • 검증 되지 않은 사용자가 URL parameter나 HTTP 요청 header의 정보를 수정하여 공격할 수 있다.
  2. 지속적 기법(Persistent) / 저장형 XSS(Stored XSS)
    • 공격자가 설정한 데이터가 서버에 저장되어 다른 사용자가 일반적인 브라우징 과정을 수행할 때 평범한 페이지에 영구적으로 보여진다.
    • 이 기법은 공격 대상을 따로 지정하거나 피해자를 third-party 웹 사이트로 유인할 필요 없이 서버에 저장된 악성 script가 자동으로 실행되기 때문에 다른 기법들보다 매우 위험하다.
  3. DOM 기반 XSS(DOM-based XSS)
    • 이 기법은 악성 데이터가 웹 서버에 영향을 주는 대신 Javascript 코드에 반영되어 클라이언트 사이드에 직접 영향을 준다.
    • 기존 XSS 취약점들은 서버 사이드에서 모든 데이터를 처리하는 애플리케이션에서 발견되었는데, 이 방식은 사용자 경험 향상에 대한 요구가 증가로 클라이언트 측에서 presentation 로직을 처리되는 애플리케이션의 인기와 함께 사용자 입력 값 처리와 렌더링 처리를 할 수 있는 Javascript 코드를 사용하는 방식으로 등장했다.

방지법

  1. HTML sanitization 엔진을 사용하여 신뢰할 수 없는 HTML 입력에 유효성 검사를 실행한다.
  2. cookie 설정 시 보안 관련 설정을 적용한다.
    • session cookie와 사용자가 처음 로그인 한 IP 주소를 연결해 특정 IP를 가진 cookie만 허용하도록 설정할 수 있다.
    • HttpOnlysecure 옵션를 사용하여 클라이언트 사이드에서 cookie를 읽지 못하게 설정한다.
    • SameSite=Strict 또는 SameSite=Lax 설정을 적용한다.
      • Strict는 모든 Cross-origin 요청에 cookie 전송을 방지
      • Lax는 안전한 Cross-origin(GET, OPTIONS, TRACE)에서 cookie 전송