# InsuWiki — 플로팅 연결 보안 취약점 수정 + UI 개선 (CRITICAL)

## ★★★ 보안 취약점 — 즉시 수정 필수 ★★★

### 취약점: FloatingTermDetection 사용자 필터링 부재

**파일**: `/home/jay/projects/insuwiki/nextapp/src/components/FloatingTermDetection.tsx`

**현재 코드** (Line 43-45):
```typescript
const docsRef = collection(db, COLLECTIONS.DOCUMENTS);
const q = query(docsRef, where('searchKeywords', 'array-contains', keyword));
```
→ **모든 사용자의 모든 문서를 검색** → 다른 유저의 private 문서 제목이 노출됨

**수정** — BacklinksPanel 패턴 적용:
```typescript
const docsRef = collection(db, COLLECTIONS.DOCUMENTS);
const q = query(
    docsRef,
    and(
        or(
            where('visibility', '==', 'public'),
            where('authorId', '==', auth.currentUser?.uid)
        ),
        where('searchKeywords', 'array-contains', keyword)
    )
);
```

**참고**: BacklinksPanel.tsx (Line 37-71)에 올바른 필터링 패턴이 이미 구현되어 있음. 동일 패턴 적용.

### Firestore Rules 확인
`/home/jay/projects/insuwiki/firestore.rules`에서 DOCUMENTS 컬렉션의 read 권한이 올바르게 설정되어 있는지도 확인. 클라이언트 코드뿐 아니라 서버 규칙에서도 데이터 격리가 보장되어야 함.

---

## UI 개선: 플로팅 연결 검색 드롭다운 크기

**현재**: `max-h-40` (160px) 고정 → 리스트가 잘림

**수정**:
- 리스트 0~10개: 항목 수에 따라 동적 높이 (각 항목 약 40px)
- 10개 초과: max-height 400px 고정 + 스크롤
```tsx
// 동적 높이 계산
const listHeight = Math.min(results.length * 40, 400);  // max 400px (약 10개)
style={{ maxHeight: `${listHeight}px` }}
className="overflow-y-auto"
```

---

## 검증 시나리오

1. **보안**: 로그인한 사용자가 "일상생활배상책임" 검색 시 본인 문서 + public 문서만 나타나면 성공
2. **보안**: 다른 사용자의 daily note("2026-03-19" 등)가 검색 결과에 나타나지 않으면 성공
3. **UI**: 검색 결과 1~10개일 때 리스트 높이가 동적으로 조절되면 성공
4. **UI**: 검색 결과 10개 초과 시 스크롤이 가능하면 성공
5. **회귀**: 기존 연결 기능(연결 버튼 클릭 → 문서 연결) 정상 동작