(node.js) 보안

최대 1 분 소요

1. queryString에서 상대경로 주입.

  • 쿼리스트링에서 상대경로 정보를 넣으면 내부에서 사용하는 파일정보를 확인할수 있음…
  • 외부에서 요청된 쿼리스트링 데이터에 필터를 적용하여 오염된 정보가 들어오는 것을 막아 보자!

공격 예

쿼리 스트링에 ../ 상대 경로 정보를 넣어 내부 시스템 파일정보를 읽는다..
http://localhost:3000/?id=../password.js

예방 방법

  • 아래 코드를 적용하여 모든 querystring에 base필터를 적용한다.
// path모듈 사용
var path = require('path');
var url = require('url');

var _url = request.url;
var queryData = url.parse(_url, true).query;
// path.parse함수에 쿼리스트링을 인자로 넣어 파싱하고 .base로 기본데이터만 가져온다.
var filteredId = path.parse(queryData.id).base;

2. XSS크로스사이드 스크립트 공격

  • 데이터안에 javascript값을 넣어 공격하는 것
  • ’<’ 꺽쇠로 입력된 데이터는 &lt와 &gt로 바꿔 주면 해결된다.
  • senitize-html 이라는 npm 외부 모듈을 사용하는 방법..
  • https://www.npmjs.com/package/sanitize-html

가. sanitize-html 모듈 설치하기

1. node.js 콘솔창에  npm을 사용하도록 아래와 같이 입력! 
> npm init

2. pakage.json파일이 프로젝트내에 생성된거 확인


2. sanitize-html 인스톨
> npm install -s sanitize-html

3.  pakage.json 파일에 dependencies에 sanitize-html가 의존성이 설정되어 있는지 확인

나. 사용방법

var sanitizeHtml = require('sanitize-html');
 
var dirty = 'some really tacky HTML';

var clean = sanitizeHtml(dirty);

//allowedTags로 옵션도 줄 수 있다.
var clean = sanitizeHtml(dirty, {
  allowedTags: ['h1','h2']
});

댓글남기기