💬 지금까지 express 서버를 만들어보며 helmet이 보안과 관련된 것이라고만 알고 있었지 어떤 보안과 관련된 것인지는 알지 못했다. 이번 블로깅을 통해 조금이나마 알아보고자 한다.
Helmet은 다양한 HTTP 헤더를 설정하여 Express 앱을 보호하는 데 도움이 됩니다
라고 express 문서에 쓰여있다.
즉 Express.js 사용시 HTTP 헤더 설정을 자동으로 바꾸어주어 잘 알려진 몇가지 앱의 취약성으로 부터 앱을 보호 할 수 있는 패키지이다.
1-1. SSL (Secure Socket Layer) 보안 소켓 계층
: 웹사이트와 브라우저 ( 혹은 두 서버 ) 사이에 전송된 데이터를 암호화하여 인터넷 연결을 유지하는 표준 기술, 이는 해커가 정보 및 금융 정보를 포함한 전송되는 모든 정보를 열람하거나 훔치는 것을 방지한다.
1-2. TLS: 전송 계층 보안(Transport Layer Security, TLS)
TLS는 가장 최신 기술로 더 강력한 버전의 SSL 그러나 SSL이 더 일반적으로 사용되는 용어이기에, 여전히 보안 인증서는 SSL이라 불린다.
1-3. XSS (Cross Site Scripting) 공격
1-4. Strict-Transport-Security
: 웹 사이트를 접속할 때 강제적으로 https프로토콜로만 접속하게 하는 기능.
적용 전
적용 후
const helmet = require('helmet');
const express = require('express');
const app = express();
app.use(helmet());
📌 옵션 설정 방법
app.use(
helmet({
frameguard: false,
})
);
Default 옵션 확인 및 상세 사항은 https://www.npmjs.com/package/helmet 참조하기
helmet(options)
helmet.contentSecurityPolicy(options)
helmet.crossOriginEmbedderPolicy()
helmet.crossOriginOpenerPolicy()
helmet.crossOriginResourcePolicy()
helmet.expectCt(options)
helmet.referrerPolicy(options)
helmet.hsts(options)
helmet.noSniff()
helmet.originAgentCluster()
helmet.dnsPrefetchControl(options)
helmet.ieNoOpen()
helmet.frameguard(options)
helmet.permittedCrossDomainPolicies(options)
helmet.hidePoweredBy()
helmet.xssFilter()
app.use(helmet()); 만 설정 할 경우 기본적인 보안(X-Powered-By 등)만 설정해 주며
csp, expectCt, hpkp, noCache, referrerPplicy는 적용되지 않는다.
이를 적용하려면 다음과 같이 별도로 설정한다. (각 미들웨어 마다 별도로 설정을 해야한다.)
app.use(helmet.noCache());
app.use(helmet.hpkp());
https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/news
helmet 5버전에서는 다음과 같이 해야 외부 이미지, 아이프레임 등이 제대로 표시됩니다.
app.use(
helmet({ contentSecurityPolicy: false, crossOriginEmbedderPolicy: false, crossOriginResourcePolicy: false }),
);
4버전에서 contentSecurityPolicy가 기본 true가 되었고,
5버전에서는 coep와 corp, coop(cross-origin-opener-policy)가 기본 true가 되어서 더 엄격해졌습니다.