본문 바로가기
사이드 프로젝트/개발몰입과정[2021_SUMMER]

생활코딩 node.js - 보안

by 의정부핵꿀밤 2021. 8. 16.
728x90

[ 입력정보에 대한 보안 ]

데이터베이스 -> id, passwd가 있어야 데이터를 사용할 수 있다

id, passwd를 관리해야 한다!!

 

만약 비밀번호를 'password.js'라는 파일에 저장해놓고, 입력 정보에 대해 보안을 걸어두지 않으면 아래처럼 접근 시 파일 내용을 모두 볼 수 있게 된다

id 부분에 경로를 넣고 파일 이름을 넣으면 해당 파일의 내용이 그대로 노출되게 된다!!

따라서 이를 방지해줘야한다

 

이를 막기 위한 노드의 기술 중 path.parse라는 것을 사용해볼것이다

 

먼저 요렇게 path 변수를 선언하고

 

이런식으로 path.parse를 통해 정보를 한 번 필터링해서 사용한다 (파싱)

 

이는 사용자로부터 정보가 들어오는 create, update, delete 에 모두 추가하면된다

 

 

 

 

[ 출력정보에 대한 보안 ]

사용자가 글을 쓸 떄 위처럼 스크립트 내용을 입력을 하고 등록하면 해당 글을 조회할 떄 아래처럼 스크립트가 실행된다

 

만약 이게 사용자가 악의를 품고 정보 갈취 등과 같은 것을 했다면 큰일나게 될 것이다

따라서 이를 막는 작업을 해본다

 

 

< 출력 보안 방법 >

1. <scipt> 아예 지워버리기

사용자가 입력한 내용 중 <script>는 아예 지워버리는것이다

이 방법은 확실하나 너무 강력해서 비추,,,

 

2. 수동으로 <script>를 그대로 출력되도록 바꾸기

 

 

위처럼 < >를 html 형식으로 보이게끔 바꿔준다

< : &lt, > :&gt

 

그럼 위처럼 잘 나오긴 하지만 하나하나 수동으로 언제하냐구,,,ㅠ_ㅠ

 

3. npm sanitize html (html을 npm 모듈로 소독하기(?))

모듈을 사용하기 전, npm으로 관리하기 위해 $npm init을 실행시켜준다

 

그럼 package.json 파일이 생긴다 (상관 없음)

그리고 $npm install -S sanitize-html 을 실행시켜 모듈을 다운받는다

(이 때 -S는 현재 프로젝트에서만 해당 모듈을 사용하겠다는 뜻이고, -g는 모든 프로젝트에서 글로벌하게 사용하겠다는 뜻의 옵션이다)

 

 

sanitize-html은 이런식으로 사용하면 된다

맨 위에 변수 선언해주고 저렇게 쓰면 html 태그를 입력받아도 모두 쳐내게 된다

이 떄 일부 태그는 허용하고 싶으면 저렇게 allowedTags를 통해 허용할 태그를 쓰면 된다!

 

요정도로 맛보기로 마무리하기~~

728x90

댓글