본문 바로가기

nodejs

Node.js 보안 모듈 (helmet, hpp)

Node.js 서버의 취약점들을 보완해주는 모듈입니다. 

이 모듈을 사용한다해서 모든 취약점을 방어해주는 것은 아니므로 주기적인 점검은 필요합니다.

 

사용법은 간단합니다. 우선 npm 설치를 진행합니다.

$ npm i helmet hpp

 

코드는 개발 환경에서는 굳이 사용하지 않아도 되니 운영 환경에서만 사용하는 걸로 작성해줍니다.

if(process.env.NODE_ENV === "production"){
    app.use(helmet());
    app.use(hpp()); //HTTP Parameter pollution을 방어
}

helmet

🚧 Helmet을 이용하면 HTTP 헤더를 적절히 설정하여 몇 가지 잘 알려진 웹 취약성으로부터 앱을 보호할 수 있습니다.

사실 Helmet은 보안 관련 HTTP 헤더를 설정하는 다음과 같은 더 작은 크기의 미들웨어 함수 9개의 모음입니다.

  1. csp는 Content-Security-Policy 헤더를 설정하여 XSS(Cross-site scripting) 공격 및 기타 교차 사이트 인젝션을 예방합니다.
  2. hidePoweredBy는 X-Powered-By 헤더를 제거합니다.
  3. hsts는 서버에 대한 안전한(SSL/TLS를 통한 HTTP) 연결을 적용하는 Strict-Transport-Security 헤더를 설정합니다.
  4. ieNoOpen은 IE8 이상에 대해 X-Download-Options를 설정합니다.
  5. noCache는 Cache-Control 및 Pragma 헤더를 설정하여 클라이언트 측에서 캐싱을 사용하지 않도록 합니다.
  6. noSniff는 X-Content-Type-Options 를 설정하여, 선언된 콘텐츠 유형으로부터 벗어난 응답에 대한 브라우저의 MIME 가로채기를 방지합니다.
  7. frameguard는 X-Frame-Options 헤더를 설정하여 clickjacking에 대한 보호를 제공합니다.
  8. xssFilter는 X-XSS-Protection을 설정하여 대부분의 최신 웹 브라우저에서 XSS(Cross-site scripting) 필터를 사용하도록 합니다.

hpp

 🚧  Express가 동일한 이름을 가진 파라메터가들이 있을 경우 Array로 만들어주는데 의도치 않은 동작을 하도록 외부에서 공격할 수 있는 보안 문제가 될 수 있다고 합니다. 입력 데이터 검증을 회피하거나 앱 크래시를 유발 시킬 수 있죠. 이를 방어하기 위한 express 모듈입니다.