포시코딩

1월22일 - helmet 본문

TIL

1월22일 - helmet

포시 2023. 1. 22. 16:09
728x90

helmet

helmet 라이브러리는 다양한 HTTP header를 설정하여 Express 앱을 보호하는데 도움을 준다.

 

사용방법

const express = require("express");
const helmet = require("helmet");  // (1)

const app = express();

app.use(helmet());  // (2)

주석으로 해놓은 (1), (2) 두 줄이 끝이다. 최상위 helmet() 함수는 아래 15개의 작은 미들웨어를 감싸고 있다.

 

세부 미들웨어 간단 정리

  • helmet.contentSecurityPolicy(): 크로스 사이트 스크립팅 공격 완화
  • helmet.crossOriginEmbedderPolicy(): Cross-Origin-Embedder-Policy(COEP) 헤더 설정 [참고]
  • helmet.crossOriginOpenerPolicy(): Cross-Origin-Opener-Policy 헤더 설정 [참고]
  • helmet.crossOriginResourcePolicy(): Cross-Origin-Resource-Policy 헤더 설정 [참고]
    • Spectre와 같은 공격에 대한 강력한 방어 수단으로,
      공격자의 프로세스에 들어가기 전에 브라우저가 주어진 응답을 차단할 수 있게함
  • helmet.expectCt(): 잘못 발급된 SSL 인증서를 완화하는 헤더 설정
    • but, 2022년 이후부터 새 브라우저에서 유용하지 않아 helmet의 다음 버전부터 삭제 예정
  • helmet.referrerPolicy(): 요청에 포함되어야 하는 referrer 정보의 양을 제어
  • helmet.hsts(): Strict-Transport-Security (HSTS)로 축약
    • 사이트가 HTTPS를 통해서만 액세스되어야 하며
      향후 HTTP를 사용하여 사이트에 액세스하려는 모든 시도는 자동으로 HTTPS로 변환되어야 함을 알림
  • helmet.noSniff(): 보안 취약점을 유발할 수 있는 MIME 유형 스니핑을 완화
  • helmet.originAgentCluster(): 웹 응용 프로그램이 원본을 격리할 수 있는 메커니즘을 제공하는 헤더 설정
  • helmet.dnsPrefetchControl(): DNS 미리 가져오기 제어 헤더를 설정하여 링크 클릭 시의 대기 시간을 줄임
  • helmet.ieNoOpen(): 안전하지 않은 다운로드를 강제로 저장하여 사이트 컨텍스트에서의 HTML 실행을 완화한다.
    • XSS 공격 방어
  • helmet.frameguard(): 클릭재킹 공격 방어
    • 클랙재킹: 웹 페이지 기반의 공격 유형.
      페이지 위에 투명한 계층을 만들어 사용자가 클릭하거나 내용을 입력하게 유도하는 공격이다.
  • helmet.permittedCrossDomainPolicies(): 도메인 간 콘텐츠 로드에 대한 도메인 정책을 알려주는 헤더 설정
  • helmet.hidePoweredBy(): 일부 프레임워크(ex: express)에서 기본적으로 설정되는 헤더 제거
  • helmet.xssFilter(): 이 기능은 잘 이해가 안간다.
    • X-XSS-Protection을 0으로 설정한다는데 XSS 공격을 감지하면
      X-XSS-Protection을 통해 페이지 로드를 중지해주는걸 왜 0으로 하는건지 (0은 끄는거 아닌가?)

 

일단 최대한 공식 npm 문서를 보고 정리해봤는데 

좀 더 처음 접하는 사용자에게 잘 설명될만한 포스팅이 있어 따로 링크를 남긴다.

일단 나부터 처음 써보는 라이브러리이기 때문에

헤더의 설정을 통해 웹 취약점으로부터 서버를 보호해주는 라이브러리라는 점만 인지하고 사용해보면서 알아가야 할 것 같다.

 

 

 

 

참고한 곳

https://llshl.tistory.com/39

 

[NodeJS] Helmet을 사용한 Express 보안

거의 한달만에 글을 쓴다. 그간 참 많은 일이 있었다. 취업을 했고 킥보드를 타다가 응급실도 갔다. 너무 정신없는 시간이었다고 변명을 해본다ㅠ 요즘은 TypeScript+Express를 통한 개발을 하고있는

llshl.tistory.com

 

728x90

'TIL' 카테고리의 다른 글

1월24일 - DB time zone  (0) 2023.01.24
1월23일 - console.log, alert  (0) 2023.01.23
1월21일 - TypeScript 기본 세팅  (0) 2023.01.21
1월20일 - 오버로딩(overloading)  (0) 2023.01.20
1월19일 - Sequelize Transaction  (0) 2023.01.19