[node.js] 입력정보 보안 처리
홈페이지에서 댓글이나 게시물을 작성할 때 사용자가
라는 식으로 스크립트 태그를 넣을 수 있다
이렇게 되면 작성된 스크립트 태그에 의해서 alert가 작동되게 되는데 이걸 이용하여
유저의 정보를 빼가거나 , 링크를 걸어 악의적으로 홈페이지 이동을 만들 수 있다
이 때 방법은 2가지가 있다
1. 하나는 script 태그를 완전히 지우는 방법과
2. 또 다른 하나는 < > 태그를 entity code로 전환해주는 것이다.
같이 변환시켜 주면 스크립트가 적용되지 않고 그대로 본문에
가 출력되는 것을 볼 수 있다.
참고자료
Result | Description | Entity Name | Entity Number |
---|---|---|---|
non-breaking space | |   | |
< | less than | < | < |
> | greater than | > | > |
& | ampersand | & | & |
" | double quotation mark | " | " |
' | single quotation mark (apostrophe) | ' | ' |
¢ | cent | ¢ | ¢ |
£ | pound | £ | £ |
¥ | yen | ¥ | ¥ |
€ | euro | € | € |
© | copyright | © | © |
® | registered trademark | ® | ® |
하지만 이런걸 손으로 작성하기엔 너무 무리이기 때문에
npm sanitize-html 라는 보안 모듈이 있다
커맨드 창에
npm init 을 실행
-> 나의 에플리케이션을 npm으로 관리하기 위한 절차를 시작
그 후 엔터를 쭉 누르고 쭉 넘어가면 package.json이 생성되고 프로젝트에 관한 정보를이 생성된다
그 후 다시
npm install -S sanitize-html 를 입력한다
(-S를 선언하면 내가 진행하고 있는 프로젝트의 작은 부품으로 설치가 되고 -g를 하게 되면
컴퓨터 전역에서 사용할 수 있는 것이 설치가 된다.)
다운로드가 시작..
node_modules가 생성되고 여러가지 파일이 다운로드 받아지고
다시
package.json에
"dependencies": {
"sanitize-html": "^1.20.0"
}
의존성이 추가된다
sanitize-html 사용법
var sanitizeHtml = ;var dirty = 'some really tacky HTML';var clean = ;
위 sanitizeHtml 을 선언 후
sanitizeHtml(inputData); 를 통해 오염된 데이터 ( 스크립트 선언 등) 를 살균하는 것이 가능하다.
sanitizeHtml를 통해 살균이 되면 <script > 는 강력하게 삭제가 된다 .
하지만 <p> 태그나 <h1>태그 같은 경우 완전히 지워지지는 않고 내용은 살려주게 되는데 태그는
적용되지 않는다 . 이때 태그를 허용하는 방법이 있는데
clean =;
등과 같이 사용하는 것이 가능하다.
즉
var sanitizeData = sanitizeHtml( inputData ,{
allowedTags: ['h1','p']
});
allowedTags: ['h1','p']를 통해 허용할 수 있는 태그를 지정하게 되면 allowedTags: 안에 있는 태그는 작성할 수 있게 된다 .