Node.js 서버의 취약점들을 보완해주는 모듈입니다.
이 모듈을 사용한다해서 모든 취약점을 방어해주는 것은 아니므로 주기적인 점검은 필요합니다.
사용법은 간단합니다. 우선 npm 설치를 진행합니다.
$ npm i helmet hpp
코드는 개발 환경에서는 굳이 사용하지 않아도 되니 운영 환경에서만 사용하는 걸로 작성해줍니다.
if(process.env.NODE_ENV === "production"){
app.use(helmet());
app.use(hpp()); //HTTP Parameter pollution을 방어
}
helmet
🚧 Helmet을 이용하면 HTTP 헤더를 적절히 설정하여 몇 가지 잘 알려진 웹 취약성으로부터 앱을 보호할 수 있습니다.
사실 Helmet은 보안 관련 HTTP 헤더를 설정하는 다음과 같은 더 작은 크기의 미들웨어 함수 9개의 모음입니다.
- csp는 Content-Security-Policy 헤더를 설정하여 XSS(Cross-site scripting) 공격 및 기타 교차 사이트 인젝션을 예방합니다.
- hidePoweredBy는 X-Powered-By 헤더를 제거합니다.
- hsts는 서버에 대한 안전한(SSL/TLS를 통한 HTTP) 연결을 적용하는 Strict-Transport-Security 헤더를 설정합니다.
- ieNoOpen은 IE8 이상에 대해 X-Download-Options를 설정합니다.
- noCache는 Cache-Control 및 Pragma 헤더를 설정하여 클라이언트 측에서 캐싱을 사용하지 않도록 합니다.
- noSniff는 X-Content-Type-Options 를 설정하여, 선언된 콘텐츠 유형으로부터 벗어난 응답에 대한 브라우저의 MIME 가로채기를 방지합니다.
- frameguard는 X-Frame-Options 헤더를 설정하여 clickjacking에 대한 보호를 제공합니다.
- xssFilter는 X-XSS-Protection을 설정하여 대부분의 최신 웹 브라우저에서 XSS(Cross-site scripting) 필터를 사용하도록 합니다.
hpp
🚧 Express가 동일한 이름을 가진 파라메터가들이 있을 경우 Array로 만들어주는데 의도치 않은 동작을 하도록 외부에서 공격할 수 있는 보안 문제가 될 수 있다고 합니다. 입력 데이터 검증을 회피하거나 앱 크래시를 유발 시킬 수 있죠. 이를 방어하기 위한 express 모듈입니다.
'nodejs' 카테고리의 다른 글
sentry 주요 기능 설명 (0) | 2022.03.03 |
---|---|
[Node.js] express-ajv Json 스키마 유효성 검증 (0) | 2021.12.14 |
[Node.js] express i18n 다국어 사용방법 (0) | 2021.12.13 |
[Node.js] Sequelize Create 메서드에서 특정 레코드만 반환 (0) | 2021.11.10 |