// JSX 코드
const element = <h1>{title}</h1>
'title'이 임베딩되었다고 강의에서 설명하던데, 여기서 '임베딩'이란 무엇인지 궁금했다.
찾아보니 다양한 의미의 임베딩이 있었다.
머신러닝에서의 임베딩이 있었는데, 찾으려는 의미와 달랐다.
단순히 '삽입'이라는 의미인 것 같다. (from.멀티미디어와 임베딩)
웹 해킹에서 대표적인 기술 중 하나로 간단하면서 보편적인 해킹 방법이다.
원리는 간단하지만 해당 스크립트가 갖는 공격성은 강력하므로 자주 활용되기 때문에 OWASP top10에도 포함된다.
사이트 간 스크립팅이라는 의미로 다른 웹 사이트와 정보를 교환하는 식으로 작동한다.
블랙해커는 웹 페이지를 통해 클라이언트(사용자)에게 악의적인 스크립트로 공격하여 원하는 정보를 취득하거나 직접적인 공격을 가할 수 있다.
예를 들면 클라이언트의 쿠키를 탈취하여 클라이언트의 계정으로 접속을 시도할 수 있고, 관리자가 당하는 경우 관리자 계정으로 접속하게 되어 더 큰일이 발생할 수 있다.
1. Stored XSS (저장 XSS)
2. Reflected XSS (반사 XSS)
3. DOM-based XSS (문서 객체 모델-기반 XSS)
DOM(Document Object Model)이란 W3C 표준으로, 정적 문서의 요소들을 객체로 구성하여 브라우저에서 실행되는 스크립트가 HTML, XML 등의 정적 문서의 요소에 동적으로 접근하고 업데이트할 수 있도록 하는 언어 중립적인 API이다. DOM에는 HTML 태그와 스크립트가 포함되어 있으며, 브라우저에서 렌더링할 때 스크립트가 실행되어 DOM 문서 내 계층적으로 구성된 객체에 접근하고 읽고 쓰게 되면서 웹 페이지의 컨텐츠가 동적으로 변경된다.
(1) 공격자는 파라미터에 악성 스크립트를 포함시킨 URL을 작성하여 희생자에게 전달한다.(링크, 악성 메일 등)
(2, 3, 4) 희생자의 브라우저는 렌더링 중 HTML을 페이지에 추가하기 위해 innerHTML로 다뤄지는 사용자 입력을 구문 분석하고 페이지를 동적으로 생성한다.
(4, 5) DOM-based XSS은 이러한 과정에서 악성 스크립트가 포함된 사용자 입력이 페이지의 HTML 태그에 추가되어 실행되는 공격이다.
서버의 응답 내에는 악성 스크립트가 포함되지 않지만, 브라우저에서 응답 페이지 내 정상적인 스크립트가 실행되며 악성 스크립트가 추가되어 실행되는 것이다.
DOM-based XSS의 예방으로 웹 방화벽에 의존하거나 서버 측 코드에서 필터링에 의존하는 경우, URL 끝에 ‘#’을 두고 악성 스크립트를 위치시키면(ex. http://www.test.com/param=elcsc#) 브라우저에서 ‘#’ 문자 뒤의 내용을 서버에 전달하지 않기 때문에 보이지 않게 우회하여 스크립트가 실행될 수 있다.
앞에서 다룬 Stored XSS 및 Reflected XSS은 서버 측 코드 취약점으로, 서버가 전달하는 응답 페이지에 악성 스크립트가 포함되어 브라우저에서 실행되는 공격인 반면,
DOM-based XSS은 클라이언트 측 코드 취약점으로, 브라우저에서 정상적인 응답 페이지가 HTML을 동적으로 업데이트하면서 악성 스크립트가 추가되고 실행되는 것이 차이점이다.
4. Universal XSS (보편 XSS)