티스토리 뷰

[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');

위와 같이 해주면 스크립트 부분은 자동으로 세척해주며 태그의 경우에는 삭제하고 내용은 남겨준다. 또는 메뉴얼을 보면 설정을 달리해줄 수도 있다.

직접하려면 굉장히 까다로울 수 있지만, 이미 만들어 놓은 모듈을 활용하여 들어오는 정보와 나가는 정보를 문제없게 처리할 수 있다.


댓글
댓글쓰기 폼