-
Notifications
You must be signed in to change notification settings - Fork 5
Express Helmet
Lee Dogyeong edited this page Dec 20, 2020
·
4 revisions
Express.js 사용시 Http 헤더 설정을 자동으로 바꾸어주어 잘 알려진 몇가지 앱의 취약성으로 부터 앱을 보호 할 수 있는 패키지이다.
- Content-Security-Policy 헤더 설정. XSS(Cross-site scripting) 공격 및 기타 교차 사이트 인젝션 예방.
- Public Key Pinning 헤더 추가. 위조된 인증서를 이용한 중간자 공격 방지. (삭제됨)
- SSL/TLS를 통한 HTTP 연결을 적용하는 Strict-Transport-Security 헤더 설정.
- Cache-Control 및 Pragma 헤더를 설정하여 클라이언트 측에서 캐싱을 사용하지 않도록 함. (삭제됨)
-
X-Frame-Options헤더 설정하여 클릭재킹(clickjacking)에 대한 보호 제공- 클릭재킹 공격: 가짜UI로 사용자의 의도와 다르게 동작하게 하는 것 (가짜버튼 등)
- 브라우저에게 프레임 내부의 컨텐츠가 어떻게 렌더링될 지 알려준다
- 기본값은
SAMEORIGIN으로 origin이 다르면 렌더링하지 않는다 -
X-Frame-Options헤더는 CSP의frame-ancestors지시문으로 대체되었지만, 구형 브라우저에서는 유용하다
-
X-Download-Options헤더를noopen으로 설정 (IE8 에서만 적용) - 위험한 파일을 다운로드할 때 바로 실행되는 것을 막기 위해 '열기'버튼이 비활성화된다
-
X-XSS-Protection헤더를 0으로 설정하여 브라우저에서 해당 기능을 비활성화 -
X-XSS-Protection헤더를 구형 브라우저 사용자들을 위해 활성화할 수 있지만, 보안적인 이점을 주기 보다는 여러가지 이슈가 발견되는 등의 문제점으로 사용하지 않는 것이 기본값 - 최신 웹 브라우저들은 대신
Content-Security-Policy헤더로 XSS를 방어함
-
X-Content-Type-Options를nosniff로 설정한다 - 선언된 콘텐츠 유형으로부터 벗어난 응답에 대한 브라우저의 MIME 가로채기를 방지
- 브라우저가 요청에 명시된 MIME Type과 실제 파일의 타입이 다르면 다운로드하지 않게 한다
-
X-DNS-Prefetch-Control헤더를 설정 - 기본값은
off로, DNS prefetching을 비활성화한다
-
X-Permitted-Cross-Domain-Policies헤더를 설정 - 주로 어도비 플래시, 어도비 아크로뱃(PDF)에서 크로스 도메인 컨텐츠 접근 권한을 지정한다
- 기본값은
none으로 모든 요청을 차단한다
- 프레임워크에서 기본적으로 설정되는
X-Powered-By헤더를 숨기는 기능 - 보안적으로 큰 이점은 없는 듯
// This...
app.use(helmet());
// ...is equivalent to this:
app.use(helmet.contentSecurityPolicy());
app.use(helmet.dnsPrefetchControl());
app.use(helmet.expectCt());
app.use(helmet.frameguard());
app.use(helmet.hidePoweredBy());
app.use(helmet.hsts());
app.use(helmet.ieNoOpen());
app.use(helmet.noSniff());
app.use(helmet.permittedCrossDomainPolicies());
app.use(helmet.referrerPolicy());
app.use(helmet.xssFilter());현재 우리 프로젝트에서 CSRF Token은 생각처럼 잘 진행되지않는 고민거리이다. 그 이유가 Cookie로 저장된 CSRF Token은 httpOnly 옵션을 주게되면 값을 가지고 있을 수 없기 때문이다..😂
httpOnly 옵션을 설정해주지않으면 XSS공격에 취약해지기 때문에 이문제로 고민하다 결국 httpOnly 옵션을 주지않고 CSRF를 방어하는 방향으로 가기로 결정했는데, 뭔가 찝찝한 마음이 한켠에 존재하고있었다.
이번에 Express helmet을 사용하면서 CSP(Content-Security-Policy 헤더 설정. XSS(Cross-site scripting) 공격 및 기타 교차 사이트 인젝션 예방.) 을 찾아보게 되었고, XSS공격을 예방해준다는 것을 확인하고 조금 안심하고 사용할 수 있게 된 것 같다.
© Boostcamp