(node.js) 보안
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값을 넣어 공격하는 것
- ’<’ 꺽쇠로 입력된 데이터는 <와 >로 바꿔 주면 해결된다.
- 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']
});
댓글남기기