/** * 보안 설정 (Helmet) * * HTTP 헤더 보안 설정 * * @author TK-FB-Project * @since 2025-12-11 */ /** * Helmet 보안 설정 옵션 */ const helmetOptions = { /** * Content Security Policy * XSS 공격 방지 */ contentSecurityPolicy: { directives: { defaultSrc: ["'self'"], styleSrc: ["'self'", "'unsafe-inline'", "https://fonts.googleapis.com"], scriptSrc: ["'self'", "'unsafe-inline'", "'unsafe-eval'"], // 개발 중 unsafe-eval 허용 imgSrc: ["'self'", "data:", "https:", "blob:"], fontSrc: ["'self'", "https://fonts.gstatic.com"], connectSrc: ["'self'", "https://api.technicalkorea.com"], frameSrc: ["'none'"], objectSrc: ["'none'"] } }, /** * HTTP Strict Transport Security (HSTS) * HTTPS 강제 사용 */ hsts: { maxAge: 31536000, // 1년 includeSubDomains: true, preload: true }, /** * X-Frame-Options * 클릭재킹 공격 방지 */ frameguard: { action: 'deny' }, /** * X-Content-Type-Options * MIME 타입 스니핑 방지 */ noSniff: true, /** * X-XSS-Protection * XSS 필터 활성화 */ xssFilter: true, /** * Referrer-Policy * 리퍼러 정보 제어 */ referrerPolicy: { policy: 'strict-origin-when-cross-origin' }, /** * X-DNS-Prefetch-Control * DNS prefetching 제어 */ dnsPrefetchControl: { allow: false }, /** * X-Download-Options * IE8+ 다운로드 옵션 */ ieNoOpen: true, /** * X-Permitted-Cross-Domain-Policies * Adobe 제품의 크로스 도메인 정책 */ permittedCrossDomainPolicies: { permittedPolicies: 'none' } }; module.exports = helmetOptions;