v-html이란?
- vue 템플릿 문법을 처리하지 않고 일반 HTML로 삽입되는 데, innerHtml을 업데이트하는 기능이라고 생각하면 된다.
- 즉, 일반 텍스트가 아닌 HTML을 화면에 그리고 싶다면 사용하면된다.
- 하지만, v-html은 신뢰할 수 있는 컨텐츠만 사용을 하고, 사용자가 제공하는 컨텐츠에는 사용하면 안되는데 html을 동적으로 렌더링하면 XSS공격으로 쉽게 이어질 수 있기 때문이다.
XSS(교차 사이트 스크립팅)란?
핵심: 웹사이트에 악성 스크립트를 주입하는 행위를 말한다.
주요 목적: 사용자의 정보를 도용하는 것이다.
공격자가 상대방의 브라우저에 스크립트가 실행되도록하여 아래와 같은 공격을 진행한다.
- 사용자의 세션을 가로챈다.
- 웹사이트를 변조한다.
- 악의적인 콘텐츠를 삽입한다.
- 파싱 공격을 진행하는 것을 말한다.
즉, 스크립트언어와 취약한 코드가 공격 대상이다.
XSS 공격 방식
- 쿠키 스니핑
- 스크립트 암호화 및 우회
- 악성 스크립트 유포
- 키 로거(Key Logger)
- 마우스 스니퍼(Mouse Sniffer)
- 거짓 정보 추가
반사형 XSS
사용자에게 입력 받은 값을 서버에서 되돌려 주는 곳에서 발생한다. 피해자가 직접 스크립트를 실행하도록 유도하기 때문에 1회성 공격이며, 링크를 클릭한 사용자의 쿠키 값을 해커에게 전송하도록 설정되어 있다.
- 예시
- 피해자에게 입력 받은 검색어를 그대로 표시하는 곳
- 피해자가 입력한 값을 오류 메시지와 함께 보여주는 곳
영구적 XSS
응용프로그램이나 웹사이트의 모든 HTTP 응답을 감염시키는 공격을 의미한다. 삽입된 스크립트는 데이터베이스에 저장되고, 감염된 게시글을 열람한 사용자들은 쿠키를 탈취당하거나 다른 사이트로 리디렉션되는 공격을 받게 된다.
- 예시
- 게시판
- 사용자가 입력한 값이 DB에 저장되고 그대로 화면에 표시되는 곳에서 공격이 발생할 가능성이 높습니다
- 이유: 사용자의 입력 값을 검증하지 않기 때문에 발생한다.
- 게시판
v-dompurify-html란?
DOMPurify는 HTML, MathML, SVG를 위한 DOM 전용으로 제작된 도구이며, 위에 설명한 XSS 삭제 라이브러리라고 할 수 있습니다. JavaScript로 작성되었으며 모든 최신 브라우저(Safari(10+), Opera(15+), Edge, Firefox 및 Chrome, Blink, Gecko 또는 WebKit 등)에서 작동합니다
아래의 내용을 방지합니다.
- XSS 공격 방지
- DOM Clobbering 공격 방지
- 소프트웨어 공학에서 의도적,비의도적으로 특정 메모리나 레지스터를 완전히 덮어쓰는 현상을 의미합니다.
- jQuery를 통한 XSS 방지
- 구조적 손상 방지
- Prototype Pollution으로부터 안전
- 공격자가 객체를 수정하여 모든 객체에 애플리케이션 전체를 변경하는 것
- 공격자는 JavaScript 객체의 ' proto ' 속성을 통해 접근할 수 있습니다. 객체를 변경하면, 변조 후 생성된 객체를 포함하여 실행 중인 애플리케이션의 모든 JavaScript 객체에 적용됩니다.
결론
기존 코드에서는 v-html로 에디터에서 등록된 내용을 불러와 동적으로 HTML에 적용하고 있었는데, 이 부분이 XSS 공격에 취약했다는 점을 알게 되었고 이 부분을 보완하기 위해서 vue-dompurify-html로 변경하였습니다.
참고자료
Vue.js
Vue.js - The Progressive JavaScript Framework
vuejs.org
크로스 사이트 스크립팅의 정의 및 공격 유형
크로스 사이트 스크립팅(XSS)은 피해자가 친숙하게 생각하는 사이트에 해커가 악성 스크립트를 주입하는 행위입니다. XSS의 의미와 공격 사례, 반사형 XSS, 저장형 XSS, DOM 기반 XSS와 같은 공격 유형
nordvpn.com
Prototype pollution: The dangerous and underrated vulnerability impacting JavaScript applications
A new class of security flaw is emerging from obscurity
portswigger.net
vue-dompurify-html
Safe replacement for the v-html directive. Latest version: 5.1.0, last published: 2 months ago. Start using vue-dompurify-html in your project by running `npm i vue-dompurify-html`. There are 26 other projects in the npm registry using vue-dompurify-html.
www.npmjs.com
'개발 공부 > Vue' 카테고리의 다른 글
AOS 뒤로가기 버튼 클릭시, 해당 모달 닫히게 설정 (1) | 2024.11.16 |
---|---|
메뉴 클릭 시, 해당 화면으로 스크롤 이동하는 기능 (feat. 클릭 두번하면 처음 화면으로 돌아가는 문제 해결) (0) | 2024.11.12 |
[Vue]공통 컴포넌트로 내용이 다른 게시물로 이동시, 해당 내용이 안 보여지는 현상 (0) | 2024.08.26 |
chart.js 그래프 다시 그리기(그래프 초기화) (0) | 2024.06.17 |