더북(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로 했듯이 공식 문서를 보면서 필요 없는 옵션은 해제해야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.