더북(TheBook)

15.1.7 helmet, hpp

서버의 각종 취약점을 보완해주는 패키지들이며, 익스프레스 미들웨어로서 사용할 수 있습니다.

이 패키지들을 사용한다고 해서 모든 취약점을 방어해주는 것은 아니므로 서버를 운영할 때는 주기적으로 취약점을 점검해야 합니다.

콘솔

$ npm i helmet hpp

개발 환경에서는 사용할 필요가 없으므로 배포 환경일 때만 적용하면 됩니다.

app.js

...
const passport = require('passport');
const helmet = require('helmet');
const hpp = require('hpp');
...
if (process.env.NODE_ENV === 'production') {
  app.use(morgan('combined'));
  app.use(
    helmet({
      contentSecurityPolicy: false,
      crossOriginEmbedderPolicy: false,
      crossOriginResourcePolicy: false,
    }),
  );
  app.use(hpp());
} else {
  app.use(morgan('dev'));
}
...

helmet과 hpp가 방어해주는 취약점 목록은 각각의 공식 문서(15.7절 참조)에 나와 있습니다. 기본적으로는 배포 전에 이 두 패키지를 넣어주는 것이 좋습니다. 다만, 때로는 보안 규칙을 너무 엄격하게 적용해서 서비스가 제대로 돌아가지 않는 경우도 있으니, 예제에서 contentSecurityPolicy, crossOriginEmbedderPolicy, crossOriginResourcePolicyfalse로 했듯이 공식 문서를 보면서 필요 없는 옵션은 해제해야 합니다.