티스토리 뷰
입력창을 통한 입력을 받을 때,
<script>
//location.href = 'https://www.naver.com';
</script>
위와 같이 들어와선 안될 입력이 들어오게 된다면 큰 문제가 발생한다.
따라서 이에 대한 보안이 필요하다.
첫번째로 할 수 있는 것이
Character entities이다.
아래와 같이 하여서 <script> 모두 화면에 출력되도록 하는 것이다.
<script>
//location.href = 'https://www.naver.com';
뭐지 ;; 이 글을 쓰고 난 뒤에 내 티스토리 가면 네이버로 가진다..
이런 황당한 일이 있을 쑤가...
</script>
하지만 수동으로 해야하는 단점이 있다.
자동으로 하기 위해서는 사람들이 만들어놓은 API가 있다.
들어와서는 안되는 입력이 들어오게 된다면 이를 소독한다는 뜻에서
Sanitize-html 이라고 부른다.
https://www.npmjs.com/package/sanitize-html
sanitize-html
Clean up user-submitted HTML, preserving whitelisted elements and whitelisted attributes on a per-element basis
www.npmjs.com
이를 사용하기 위해서 npm init을 먼저 해준다.
npm init
package.json 파일을 생성하기 위함이다.
package name과 같은 설정들은 그냥 엔터 쳐주다가 yes 엔터 하면 된다.
npm init이 완료되면
npm install -S sanitize-html
위와 같은 명령어를 통해 sanitize-html 을 설치해준다.
-S 는 진행할 프로그램 속 부품으로 설치를 해준다는 뜻이다.
설치를 해줬다면 Sanitize를 사용할 js 파일로 가보자.
title에 sanitize를 한다고 가정할 때, 먼저 파일을 불러온다.
var sanitizeHtml = require('sanitize-html');
그 후, title을 sanitize를 해준다.
var sanitizedTitle = sanitizeHtml(title);
var html = template.HTML(title, list, `<h2>${sanitizedTitle}</h2>`);
사용 결과
title에 이런 잘못된 입력이 들어왔다.
웹 상에서는 아래와 같이 script 태그 부분은 빼고 표시된다.
오른쪽마우스 -> 페이지 소스보기 를 통해 소스를 봐도 script 태그 부분은 볼 수 없다.
강력하게 살균이 되었다 ! ! !
<h1> 태그를 입력하면, 그 속에 있는 내용은 살려주지만 태그는 지워버린다.
옵션을 통해 특정 태그를 허용할 수도 있으니 !!!! 잘 보시길
'Coding - Algo > Nodejs' 카테고리의 다른 글
[Nodejs] pm2 사용 (0) | 2021.06.25 |
---|---|
[Nodejs] VSCODE에서 MYSQL DB생성 (0) | 2021.06.24 |
[Nodejs] path.parse 사용 (0) | 2021.06.12 |
[Nodejs] 모듈의 형식 (0) | 2021.06.12 |
[Nodejs] Property 사용 (0) | 2021.06.09 |
- Total
- Today
- Yesterday
- 1699 자바
- swea 타일링 자바
- swea 1240
- yoloV3
- 프로그래머스 더 맵게
- 백준 dp 문제
- SWEA
- swea 1240 자바
- 백준 풀이
- 우분투
- 3996 자바
- 프로그래머스 파이썬
- 백준 17144
- 파이썬 풀이
- 1240 자바
- 프로그래머스 자바
- 타일링 자바
- ubuntu
- 더 맵게
- swea 타일링
- swea 4070 타일링
- 삼성청년SW아카데미
- 파이썬
- 프로그래머스
- poker swea
- SSAFY
- 백준파이썬
- 메뉴리뉴얼 풀이
- 백준
- union-find
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |