-
Node.js) 입력에 대한 보안처리Programming/Node.js 2019. 9. 2. 14:06
TIL(Today I learned) 을 기록하는 공간입니다.
잘못된 내용 또는 부족한 내용에 대한 수정 및 지적 환영합니다.
▶생활코딩 : Node.js - 데이터와 객체
https://www.opentutorials.org/course/3332/21150
App - 입력 정보에 대한 보안 - 생활코딩
수업소개 입력정보와 관련해서 보안적으로 처리해야 할 이슈를 살펴보겠습니다. 강의 소스코드 main.js (변경사항) var http = require('http'); var fs = require('fs'); var url = require('url'); var qs = require('querystring'); var template = require('./lib/template.js'); var path = require('path'); var ap
www.opentutorials.org
현재는 data dir에 있는 파일을 읽어와서 입력 과 수정 및 삭제를 처리하고 있다.
get 방식을 통하여 id 뒤에 넘어오는 값을 그대로 경로에 반영하여 파일을 읽어오도록 접근하고 있다.
fs.readFile(`data/${queryData.id}`, . . . ., . . . .,{
.
.
.
}
이러한 방식의 문제점은 무엇을까?
만약 만약 data 상위의 폴더인 root 폴더에 패스워드를 관리하는 password.js 파일이 있다고 하자.
현재의 방식대로라면 id 뒤에 넘어오는 값을 그대로 파일을 읽어드리는 함수에 적용하고 있기 때문에
만약 사용자가 임의로 주소창에 /?id=../password.js 를 입력하여 접근한다면
fs.readFile(`data/../password.js`, . . . ., . . . .,{
.
.
.
}
이와같은 경로가 만들어지게 되면서 자동으로 root에 있는 password 파일을 열람하게 된다.
얼마든지 경로를 조작하여 서버 내부의 폴더를 탐색하고 정보를 확인할 수 있다는 의미가 된다.
이런 경우를 예방하려면 어떻게 해야할까?
일단 경로를 변경하여 접근하는 것을 막아야한다.
넘겨져오는 경로를 parsing 해서 확인해보자.
외부 사용자가 id 뒤의 값으로 ../password.js를 입력하여 접근했을 때의 경로를 parsing하면 아래와 같다.
var path = require('path'); var filterdId = path.parse(queryData.id); console.log(fileterdId);
{ root: '',
dir: '..',
base: 'password.js',
ext: '.js',
name: 'password' }여기서 우리는 경로에 대한 접근은 막고, 꼭 필요한 파일명만 사용하기 위해서
위 객체중 base 만 뽑아서 사용한다.
var path = require('path'); var filterdId = path.parse(queryData.id).base; console.log(fileterdId);
이렇게 path의 base만 뽑아서 사용하게 될 경우,
fs.readFile(`data/password.js`, . . . ., . . . .,{
.
.
.
}
이처럼 id 뒤에 넘어오는 값으로 파일을 읽어오는 처리를 수행할때, 경로를 변경하지 못하게 파일명으로만 접근할 수 있게 된다.
>> 만약 data 파일에 password.js라는 파일이 존재하지 않는 한, 화면에는 undefinded 가 출력될 것이다.
'Programming > Node.js' 카테고리의 다른 글
Node.js) 객체 활용하기 (0) 2019.09.02 Node.js ) Javascript에서는 변수를 함수에 대입할 수 있을까? (0) 2019.09.02 Node.js ) Post 방식으로 Data 넘기기 (0) 2019.08.16 Node.js ) PM2 사용 방법 (0) 2019.08.16 Node.js ) 글 목록 불러오기 (0) 2019.08.16