생활 코딩 Nodejs 강의 중 url 의 쿼리 데이터를 통해 경로를 입력하여
서버의 컴퓨터의 데이터를 접근 할 수 있어 보안에 취약할 수 있다는 점을 배웠다
그 예시로 다음과 같은 페이지를 만들기 위해 아래와 같은 경로를 가진 서버의 경우
각각의 뷰 페이지 데이터는 루트 폴더 기준 data 폴더 내에 저장하고 있고
fs 모듈의 readdir 로 data 폴더내 파일들을 찾아
readfile 로 파일의 내용을 읽어오는 방식으로 설계하였는데
개인정보를 저장하기 위한 password.js 는 data 폴더의 상위 디렉토리에 위치시켰다
같은 data 폴더 내가 아니므로 password.js 파일은 읽히지 않겠지? 라는 생각은 위험하다
const queryData = new URL("http://localhost:3000" + _url);
쿼리 스트링 대신 URL 객체를 사용하여 id 값을 가져와 url 의 쿼리에 붙여서 아래와 같이 파일의 경로를 가져오는데
fs.readFile(`data/${id}`, "utf-8", (err, description) => {어쩌고 저쩌고}
id 변수의 양식을 정해주지 않았으므로 id 값이 '../password.js' 와 같이 파일명 앞에
상대 경로를 포함할 수 있다는 문제가 생긴다
이러면 data 폴더 외에 상위 폴더에도 접근 가능하여 개인정보를 가진 password.js 파일에도 접근가능해지며
그 외에도 서버쪽 파일들이 상대경로를 통해 모두 노출되어 접근 가능해진다
이를 막기 위해서 path 모듈의 parse() 메소드를 이용해서
path.parse('../password.js')
// { root: '', dir: '../', base: 'password.js', ext: '.js', name: 'password' }
와 같은 객체를 얻은 후 위 객체에서 base 속성만 불러와서
path.parse('../password.js').base
// password.js
상대 경로를 뺀 파일명만 가져오도록 하여
data 폴더내에서만 파일명으로 접근 가능하도록 하여 보안을 강화하도록 할 수 있다
생활코딩 web2 node.js 에서는 위의 방법으로 path 모듈을 사용하여 취약점을 막는 보안의 방법 중 하나를 설명하였다
'Node.js > 이론 및 용어' 카테고리의 다른 글
생활코딩 node.js 32강에 querystring 모듈을 대체하기 feat.URLSearchParam (0) | 2022.08.23 |
---|---|
[Node.js] 왜 url 이 두번 출력 되는 건데? feat. favicon.ico (0) | 2022.08.16 |
생활코딩 node.js 10강 에러 원인, 대처법 (0) | 2022.08.11 |
Node.js 란? (0) | 2022.08.11 |
댓글