# 보안 및 검증 > 이 문서는 그누보드7 프론트엔드 템플릿 시스템의 보안 및 검증 규칙을 설명합니다. > 전체 보안 아키텍처 및 공격 방어 전략은 [SECURITY.md](../SECURITY.md) 참조. --- ## TL;DR (5초 요약) ```text 1. 레이아웃 JSON: FormRequest + Custom Rule 10종 검증 (서버 사전 차단) 2. XSS 방지: React 자동 이스케이프 + dangerouslySetInnerHTML 금지 + HtmlContent만 허용 3. 표현식 보안: Optional Chaining + fallback 필수 ({{value ?? ''}}) 4. 상태/설정 노출: _global에 민감정보 금지 + FiltersFrontendSchema로 G7Config 최소화 5. 인증: Bearer 토큰 전용 + 401 자동 갱신 + 로그아웃 상태 정리 6. 에셋 보안: 확장자 화이트리스트 + 디렉토리 탈출 방지 ``` --- ## 목차 - [레이아웃 JSON 서버 검증](#레이아웃-json-서버-검증) - [XSS 방지](#xss-방지) - [표현식 평가 보안](#표현식-평가-보안) - [인증/토큰 프론트엔드 보안](#인증토큰-프론트엔드-보안) - [상태 관리 및 데이터 노출 보안](#상태-관리-및-데이터-노출-보안) - [렌더링 오류 방어](#렌더링-오류-방어) - [템플릿 에셋 보안](#템플릿-에셋-보안) - [의존성 검증](#의존성-검증) - [보안 체크리스트](#보안-체크리스트) - [관련 문서](#관련-문서) --- ## 레이아웃 JSON 서버 검증 레이아웃 JSON은 저장 전 서버에서 **10가지 Custom Rule**로 사전 검증됩니다. 프론트엔드 개발자는 이를 인지하되, 검증 로직을 프론트엔드에서 재구현할 필요가 없습니다. ### 검증 시점 | 시점 | FormRequest | 설명 | |------|-------------|------| | 레이아웃 생성 | `StoreLayoutRequest` | 기본 4개 Rule | | 레이아웃 수정 | `UpdateLayoutRequest` | 기본 4개 Rule (sometimes) | | 콘텐츠만 수정 | `UpdateLayoutContentRequest` | 가장 엄격 — 8개 Rule | | 상속 레이아웃 생성/수정 | `Store/UpdateLayoutInheritanceRequest` | 상속 전용 3개 Rule | ### Custom Rule 요약 | 검증 영역 | Rule | 핵심 | |----------|------|------| | JSON 구조 | ValidLayoutStructure | 필수 필드, 깊이 10단계 제한, 타입 검증 | | 컴포넌트 | ComponentExists | components.json 매니페스트 대조 | | API 엔드포인트 | WhitelistedEndpoint | `/api/(admin\|auth\|public)/` 패턴만 허용 | | 외부 URL | NoExternalUrls | http, data, javascript 등 7개 위험 스킴 차단 | | 상속 | ValidParentLayout | 순환 참조 방지, 상속 깊이 10 제한 | | 슬롯 | ValidSlotStructure | 부모에서 정의된 슬롯만 허용 | | 데이터소스 | ValidDataSourceMerge | 상속 체인 ID 고유성 | | 권한 | ValidPermissionStructure | or/and 구조 + 깊이 3 제한 | | 경로 | SafeTemplatePath | Path Traversal 13패턴 차단 | | 파일 타입 | AllowedTemplateFileType | 14개 확장자 화이트리스트 | > 상세: [SECURITY.md - Custom Validation Rules](../SECURITY.md#custom-validation-rules) --- ## XSS 방지 ### 다층 방어 전략 | 계층 | 방어 방식 | 담당 | |------|----------|------| | 저장 시 | 레이아웃 JSON 검증 | Custom Rule | | 렌더링 시 | 자동 이스케이프 | React | | URL 검증 | 외부 URL 차단 | NoExternalUrls Rule | ### React 자동 이스케이프 React는 JSX에서 출력되는 모든 값을 자동으로 이스케이프합니다: ```jsx // React가 자동으로 HTML 엔티티로 변환