helmet
Express 애플리케이션에서 HTTP 헤더를 보호하기 위한 미들웨어 패키지입니다. helmet은 각종 보안 관련 HTTP 헤더를 설정하고, 공격자들이 취약점을 이용하는 것을 방지합니다. 이를 통해 Express 애플리케이션의 보안성을 높일 수 있습니다.
> 설치하기
npm install --save helmet
> 미들웨어 등록하기
const express = require('express');
const helmet = require('helmet');
const app = express();
// helmet 미들웨어 추가
app.use(helmet());
// 라우트 핸들러 등록
app.get('/', (req, res) => {
res.send('Hello World!');
});
// 서버 시작
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
> 옵션 사용
helmet을 사용하기 위해서는 app.use(helmet())만 추가하면 되지만 기본 설정으로 적용되는 보안 기능 외에 추가적인 설정이나 옵션을 사용하고자 할 때는 helmet() 함수 내부에 객체를 전달하여 설정을 변경할 수 있습니다.
app.use(
helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
styleSrc: ["'self'", 'cdn.jsdelivr.net'],
},
},
})
);
위의 예는 contentSecurityPolicy라는 옵션을 사용하여 보안 정책을 설정하는 것입니다.
> HTTP 헤더 보안 기능
contentSecurityPolicy
Cross-Site Scripting (XSS) 및 기타 코드 인젝션 공격을 방지하기 위한 CSP(Content Security Policy)를 설정합니다.
crossdomain
Adobe Flash와 같은 다른 도메인에서 호스팅 된 리소스에 대한 액세스를 제어합니다.
dnsPrefetchControl
브라우저가 DNS 미리 가져 오기를 수행하지 못하도록 합니다.
expectCt
Certificate Transparency (CT) 로그를 사용하여 SSL/TLS 인증서 유효성을 검증합니다.
frameguard
웹 페이지가 다른 사이트의 프레임 내에서 표시되지 않도록 보호합니다.
hidePoweredBy
HTTP 응답에서 X-Powered-By 헤더를 제거하여 공격자가 서버 취약성을 더 쉽게 찾는 것을 방지합니다.
hsts
HTTPS로만 연결을 허용하도록 브라우저에 강제합니다.
ieNoOpen
IE(Internet Explorer) 브라우저에서 mime sniffing이 발생하지 않도록 합니다.
noCache
브라우저 캐시를 비활성화하여 브라우저에서 이전에 렌더링 된 페이지를 캐시하고 다시 사용하지 않도록 합니다.
referrerPolicy
HTTP 리퍼러(referrer) 헤더에 대한 정책을 설정하여 프라이버시를 강화합니다.
xssFilter
브라우저의 내장 XSS 필터를 강화하여 XSS 공격을 방지합니다.
보통 아래와 같이 미들웨어로 구현되어 사용합니다. 위에서 옵션을 사용하는 방식보다 더 구체적인 지시자 설정이 가능합니다.
const express = require('express');
const helmet = require('helmet');
const app = express();
// 기본 보안 항목 활성화
app.use(helmet());
// CSP 활성화
app.use(
helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "'unsafe-inline'"],
styleSrc: ["'self'", "'unsafe-inline'"],
},
})
);
// CT 활성화
app.use(helmet.expectCt({ maxAge: 86400 }));
// HSTS 활성화
app.use(
helmet.hsts({
maxAge: 31536000,
includeSubDomains: true,
preload: true,
})
);
// 캐시 방지 활성화
app.use(helmet.noCache());
// cross-domain 요청 보안 활성화
app.use(helmet.permittedCrossDomainPolicies());
// Referrer-Policy 활성화
app.use(helmet.referrerPolicy({ policy: 'same-origin' }));
// XSS 필터링 활성화
app.use(helmet.xssFilter());
'STUDY > ExpressJS' 카테고리의 다른 글
[7-2] http의 취약점인 보안 강화를 위한 https (1) | 2023.12.06 |
---|---|
[4-2] Express에서 정적 파일들을 제공하기 위한 미들웨어 - static (0) | 2023.05.24 |
[5-3] Express.js 라우터 모듈화 (0) | 2023.04.05 |
[5-1-1] Express.js 파라미터를 이용한 동적 URL처리 (0) | 2023.04.05 |
[4-3] Express.js 미들웨어 등록 메소드 - app.use() (0) | 2023.03.31 |