NodeJS를 위한 최소한의 7가지 보안 설정
💻기술/Security

NodeJS를 위한 최소한의 7가지 보안 설정

반응형

 

 NodeJS는 가장 널리 쓰이는 백엔드 환경이다. 그만큼 보안 이슈도 많고 보안 관련 프레임워크도 다양하다. 이 포스트에서는 NodeJS의 보안을 향상할 수 있는 기초적인 방법을 소개할 예정이다.

 

1. NPM audit

 

npm 모듈의 보안 취약점을 자동으로 진단해주고 모듈을 최신 버전으로 업데이트해주는 기능이다. 프로젝트 디렉터리에서 요청하면 된다.

npm audit

 

 

2. ngnix 사용

 

nodejs를 80, 443포트로 바로 노출시키면 여러 보안 이슈에 직면할 수 있다. 포트는 3000으로 해놓고 ngnix proxy 기능을 사용해서 뒤에 숨겨주자. 또한 letsencrypt를 사용해서 인증서를 발급받기에도 수월해진다.

 

 

3. Helmet 보안 모듈 적용

 

express 프레임워크 사용시 헤더 설정으로 알려진 보안 이슈로부터 서버를 보호하는 모듈이다. 사실상 기초적인 공격 정도는 무난하게 방어할 수 있다고 보면 된다.

 

npm install helmet
import express from 'express';
import helmet from "helmet";
const app = express();
app.use(helmet());

https://www.npmjs.com/package/helmet

 

helmet

help secure Express/Connect apps with various HTTP headers. Latest version: 6.0.0, last published: 2 months ago. Start using helmet in your project by running `npm i helmet`. There are 3456 other projects in the npm registry using helmet.

www.npmjs.com

 

 

4. 무중단

 

서버의 버그나 해킹으로 인해 서버가 중단되는 상황은 막아야만 한다.

 

npm install forever
forever start app.js

 

 

5. 정적 파일은 CDN이나 reverse proxy로 제공

 

nodejs는 단일 스레드를 사용한다. 그렇기에 한 번에 많은 용량을 스트림 하는 데에는 한계가 있다. 따라서 ngnix reverse proxy에 정적 파일을 연결하거나 오픈소스 코드의 경우 cdn을 사용해야 한다.

 

 

6. 사용자 입력 검증하기

 

대부분의 XSS공격과 취약점은 서버가 사용자 입력을 처리하는 단계에서 시작한다. 따라서 사용자 입력을 잘 처리하고 검증하는 과정이 서버 보안의 핵심이다. (사용자의 입력을 절대 신뢰해서는 안된다)

 

npm install validator
import validator from 'validator';
validator.isEmail('foo@bar.com');

https://github.com/validatorjs/validator.js

 

GitHub - validatorjs/validator.js: String validation

String validation. Contribute to validatorjs/validator.js development by creating an account on GitHub.

github.com

 

 

7. 4XX, 5XX 커스텀 에러 페이지 표시

 

nodejs 환경에서 표시되는 에러 메시지는 공격자에게 아주 좋은 정보가 될 수 있다. 따라서 에러를 잘 핸들링해주는 게 중요하다.

router.get('*', function(req, res){
    res.status(404).render('page/error/404')
});

 

 

 

참고자료

 

https://expressjs.com/ko/advanced/best-practice-security.html#use-cookies-securely

 

프로덕션 환경의 Express를 위한 보안 우수 사례

프로덕션 우수 사례: 보안 개요 “프로덕션 (production)” 이라는 용어는 소프트웨어 라이프사이클 중 애플리케이션 또는 API가 최종 사용자 또는 소비자에게 정식으로 제공되는 단계를 말합니다.

expressjs.com

https://letsencrypt.org/about/

 

About Let's Encrypt - Let's Encrypt

 

letsencrypt.org

 

https://blog.ull.im/engineering/2019/03/31/node-js-production-best-practices.html

 

ull.im

울려 퍼지다.<br/> 반향하다.<br/> 공명하다.

blog.ull.im

https://auto1.tech/securing-nodejs-applications/

 

Secure coding practices for NodeJS Web Applications - Auto1 Tech Blog

This post highlights various coding practices for securing a NodeJS web application against the most critical web attacks.

auto1.tech

반응형

'💻기술 > Security' 카테고리의 다른 글

개인정보 제공에 동의하십니까  (0) 2022.11.13