언어&프레임워크/Node.js

[Node.js]입력 정보에 대한 보안

밍풀 2023. 1. 17. 23:56

입력정보에 대한 보안

지금 앱의 보안 위험 요소 

데이터베이스 이용해서 데이터 관리하는 

아이디 패스워드가 있어야 가져올 수 있음

password.js 파일에 모듈을 만듦

password.js

주소창에 localhost:3000/?id=../password.js 

입력 시 

위의 코드가

위와 같이 인식되고, ../ 는 상위디렉토리의 의미이므로 data의 상위디렉토리에 있는 password.js 를 인식함

파일 생성 상태는 위와 같고 data 상위 디렉토리의 web1 의 password.js 를 인식하는 거임

그래서 아래와 같이 중요한 정보가 웹페이지에 출력되어 버림 

이런식으로 쿼리스트링을 조작해서 내 컴퓨터를 탐색할 수 있게 됨

 

path.parse 를 이용해 ../password.js경로를 분석하기

 

이를 이용해서 사용자로부터 경로로 들어오는 모든 코드를 바꿔줘야함

 

base이용하면 경로를 탐색하는 정보 새탁가능

외부에서 들어온 정보

위와 같은 코드 수정 필요함

위와 같이 path.parse().base를 활용해 코드 수정하면 base는  딱 파일 이름만 알려주기 때문에

../ 가 포함되어 상위디렉토리 파일을 탐색하는 거와 같은 위험을 제거할 수 있음

저 id자리에 ../ 이 들어와 버리면 내가 의도한 data파일 안에 있는 파일만 읽는게 아니라 내 컴퓨터에 있는 다른 폴더안의 내용도 읽어버리기에 

 

코드 수정하면 아래와 같이 ../ 입력해도 내용 나오지 않게됨 

위와 같이 삭제하는 코드도 외부로 부터 들어온 정보를 바탕으로 파일탐색하기에  path.parse 이용해 코드수정