[Node.js] 8일차 : 보안이슈, 입출력보안 (sanitize html)
만든 날짜: | 2019-01-18 오후 2:12 |
본 글은 에버노트에서 작성되었습니다.
출처 생활코딩-https://opentutorials.org/course/3332/21151-에 있는 강의를 들으며 요약정리한 내용입니다. 원내용은 위 링크에서 확인할 수 있습니다. 감사합니다.
Node.js43.App제작-템플릿 기능 정리정돈하기
리팩토링 : 동작 방법을 똑같이 유지하면서 내부의 코드를 더 효율적으로 개선하는 행위
우리가 사용하던 함수를 객체에 포함시킨다.
template객체가 가진 list, html함수를 사용한다.
Node.js-44.Node.js 모듈의형식
모듈이란 무엇인가 살펴보자. 많은 함수 많은 객체를 정리정돈할 수 있는 더 큰틀의 도구이다.
특정 함수를 모아놓고서 module.exports로 M을 사용할 수 있도록 작성한다.
이후 muse.js에서는 require를 통해서 현재 디렉토리에 있는 mpart.js를 part라는 변수를 통해서 사용할 수 있게된다.
실행 결과는 위와같이 되는 것을 알 수 있다.
Node.js-45.App 제작 - 모듈의 활용
pm2에서는 require하는 모듈이 바뀌어도 restart해주는 것을 알 수 있다.
우리가 자주 쓰던 객체를 모듈화시킨다. lib(라이브러리) 폴더를 따로 생성하여 그 내부에 만들어 준다.
이후 main.js에서는 require로 해당 경로의 모듈을 가져와 사용하면 된다!
Node.js-46.App 제작-입력정보에 대한 보안
쿼리스트링을 사용한 주소로 접근시 ../ 등을 사용하여 상위 디렉토리로 접근이 가능하다.(보안위험)
path의 parse를 사용한다.
즉 경로를 제외한 파일명만을 뽑아사용할 수 있다.
위와 같이 filter 변수에 보안위험요소가 걸러진 데이터를 담고 해당 filteredId를 사용해서 접근하도록 한다.
Node.js-47.1.App제작-출력정보에 대한 보안
사용 자가 글 작성을 스크립트 형식을 사용했을 때 보안문제가 발생할 수 있다.
공격자가 자바스크립트 코드를 심어놓을 수 있다. 예를 들어서 location.href = 'https://...' 이런 식으로 악성사이트경로를 지정해놓은다면 해당 페이지로 자동으로 이동하게 된다. 이 외에 훨씬 심각한 보안문제가 발생할 수 있다.
꺽쇠를 그냥 표시하는 방법이 있다. (google: html entities)
위 형식을참고.
Node.js-47.2.App제작-출력정보에 대한 보안
오염된 정보를 소독하자.npm을 통해 다른사람이 만든 모듈을 사용하여 에플리케이션을 빠르게 만들어보자.
소독은 sanitize 라고한다. 아래와 같이 검색해보자.
Google : npm sanitize html
완벽히 신뢰할 수 있는 모듈은 아니지만, 평판을 보고서 믿을만하다고 판단할 수 있으며 사용할 수 있다.
npm init을 실행하자. 그리고 enter를 바로 누르면 기본적으로 현디렉토리 이름이 패키지 명이된다. 다 엔터를 쳐서 기본값으로 지정하면
위와 같이 package.json 파일이 생성된다.
-g : global
-S : 우리가 진행하는 프로젝트 에서 사용할 작은 조각의 프로그램(부품)으로써 설치
설치를 하고나면 node_modules에 많은 디렉토리가 받아지는데 우리는 sanitize-html을 사용할 것이다.
패키지json파일에 의존성이 생겼다.
즉 나머지 디렉토리 또한 sanitize-html과 의존성이 있는 관계인 것이다. 이러한 의존성을 npm이 알아서 관리해 준것이다.
Node.js-47.3.App제작-출력정보에 대한 보안
var sanitizeHtml = require('sanitize-html');
위와 같이 해주면 스크립트 부분은 자동으로 세척해주며 태그의 경우에는 삭제하고 내용은 남겨준다. 또는 메뉴얼을 보면 설정을 달리해줄 수도 있다.
직접하려면 굉장히 까다로울 수 있지만, 이미 만들어 놓은 모듈을 활용하여 들어오는 정보와 나가는 정보를 문제없게 처리할 수 있다.
'Web > Node.js' 카테고리의 다른 글
[Node.js] 9일차-end : API, AWESOME, PM2 사용법 및 향후 공부 주제 (0) | 2019.01.19 |
---|---|
[Node.js] 7일차-2 : 글삭제 구현 (unlink, oop기본) (0) | 2019.01.17 |
[Node.js] 7일차-1 : 글쓰기, 수정 (method post, redirection) (0) | 2019.01.17 |
[Node.js] 6일차 : pm2 패키지매니저 (0) | 2019.01.17 |
[Node.js] 5일차 : sync(동기 비동기), 콜백함수 (0) | 2019.01.11 |