# Security Policy 라온누리 프로젝트의 보안 정책 및 구현 내역을 문서화합니다. --- ## 🔒 보안 조치 요약 | 보안 영역 | 조치 | 상태 | 적용일 | |----------|------|------|--------| | **XSS 방지** | HTML Sanitization | ✅ 적용 완료 | 2025-11-19 | | **인증** | Firebase Auth | ✅ 적용 완료 | 2025-10-xx | | **API 인증** | JWT Token (ID Token) | ✅ 적용 완료 | 2025-10-xx | | **SQL Injection** | Firestore (NoSQL) | ✅ 원천 방지 | - | | **CSRF** | SameSite Cookies | 🚧 검토 필요 | - | | **Rate Limiting** | API 요청 제한 | ⏳ 예정 | - | --- ## 1. XSS (Cross-Site Scripting) 방지 ### 문제점 - 사용자가 작성한 글 (`writings` 컬렉션)의 `content` 필드는 **HTML 문자열**로 저장됩니다. - Tiptap 에디터는 안전한 HTML을 생성하지만, 악의적인 사용자가 **API를 직접 호출**하여 악성 스크립트를 주입할 수 있습니다. **공격 시나리오**: ```typescript // 악의적인 API 호출 POST /api/writing { "title": "정상 제목", "content": "

정상 내용

" } ``` ### 해결책: HTML Sanitization **백엔드 자동 세탁** (`src/lib/server/writing.ts`): ```typescript import { sanitizeHtml } from "@/utils/sanitizeHtml"; // 글 생성 시 자동 세탁 (Line 46-47) const sanitizedTitle = sanitizeHtml(data.title); const sanitizedContent = sanitizeHtml(data.content); // 글 수정 시 자동 세탁 (Line 199-203) if (data.title) { updateData.title = sanitizeHtml(data.title); } if (data.content) { updateData.content = sanitizeHtml(data.content); } ``` **세탁 규칙** (`src/utils/sanitizeHtml.ts`): - ✅ **허용된 태그**: `

`, ``, ``, ``, `