프로젝트

일반

사용자정보

이슈 #243

Ryan Lee이(가) 7달 전에 변경

XSS 방지. 악성 스크립트 차단 

 ## 작업 내용 
 - LLM이 생성한 HTML을 WebView 렌더링 전 검증/필터링 (`src/utils/parseCodeBlocks.ts`에서 추출된 HTML 대상) 
 - CDN allowlist 방식 (전면 차단 대신 통제): 
   - 허용: `cdn.jsdelivr.net`, `cdnjs.cloudflare.com`, `unpkg.com`, `cdn.tailwindcss.com`, `fonts.googleapis.com`, `fonts.gstatic.com` 
   - 차단: 임의 도메인의 `<script src>`, `<link rel="stylesheet">`, `<iframe>`, `<object>`, `<embed>` 
   - 차단: `javascript:`, `data:text/html` 스킴 
   - 차단: 외부 origin으로의 fetch/XHR/WebSocket 
 - CSP `<meta>` 주입 (allowlist와 일치): 
   - `script-src https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://unpkg.com https://cdn.tailwindcss.com 'unsafe-inline'` 
   - `style-src` (상동) + `fonts.googleapis.com 'unsafe-inline'` 
   - `font-src fonts.gstatic.com data:` 
   - `connect-src 'none'` 
   - `frame-src 'none'` 
   - `object-src 'none'` 
 - `src/screens/Chat/HtmlViewerScreen.tsx` 의 `onShouldStartLoadWithRequest` 를 동일 allowlist로 확장 (기존 `about:blank`/`data:` + 허용 CDN) 
 - AXI 프롬프트(별도 이슈)에 "허용 CDN 목록만 사용" 가이드 추가 → LLM 단에서 선제 제어 
 - allowlist 외 도메인 감지 시: 해당 태그 제거 후 렌더 (사용성 우선, 경고 토스트 표시) 

 ## 수용 기준 
 - [ ] `<script src="https://cdn.jsdelivr.net/...">` 등 허용 CDN 스크립트는 정상 로드된다 
 - [ ] `<script src="https://evil.com/x.js">` 등 미허용 도메인 스크립트는 차단된다 
 - [ ] Tailwind CDN + Chart.js로 생성한 차트 HTML이 정상 렌더링된다 
 - [ ] `<iframe src="...">` 등 외부 프레임이 로드되지 않는다 
 - [ ] 프롬프트 하이재킹(AXI §8)으로 유도된 미허용 CDN 삽입이 차단된다 
 - [ ] CSP `connect-src 'none'` 으로 외부 API 호출이 차단된다 
 - [ ] 정상 HTML(인라인 스타일 + 인라인 스크립트 애니메이션)은 기존처럼 렌더링된다 

 ## 참고 
 - 관련 이슈: #241, #242 (HTML 추출 선행 작업) 
 - 관련 커밋: `05e9836` (AXI §8 하이재킹 방지), `91a0930` (HTML 추출) 
 - 주요 파일: `src/utils/parseCodeBlocks.ts`, `src/screens/Chat/HtmlViewerScreen.tsx` 
 - SRI(무결성 해시) 검증은 Phase 2로 이관 (현재는 도메인 allowlist만 적용) 

뒤로