bibimbap/docs
이정수 6047a39ca5 feat(board): W3-3 포스팅 보드 — 공지/블로그 + OG 미리보기(SSRF 방어) + 유니티 피드 감시
- posts/post_categories/unity_feed_sources/unity_feed_items 4테이블: docs/board-ddl.sql 권위 + db/schema.sql 동기, 멱등(IF NOT EXISTS/DO $$). FK·CHECK·부분 UNIQUE(unity_feed_items source_id,guid)
- 포스팅 CRUD: PostController 공개 목록(keyset 페이징 (created_at,id)) + 상세 + 작성/수정/삭제. POST_WRITE enforcement 연결(W1 PermissionGate, 임시 role 체크 0). 작성자무관 POST_WRITE 보유자 편집
- 마크다운 본문: PostMarkdownService commonmark 0.22.0 → jsoup 1.17.2 Safelist allowlist sanitize, 저장 시 1회 캐시(body_sanitized_html). script/on*/javascript:/iframe/object 제거(adversarial 감사 SOUND)
- ★SsrfSafeFetcher 공용 외부 fetch 관문: scheme allowlist + 전 resolved IP 공인검증(사설/루프백/링크로컬/메타데이터169.254.169.254 + CGNAT 100.64/10 + class-E/benchmarking/NAT64/6to4 차단) + 포트 allowlist{80/443/8080/8443} + hostname-connect(HTTPS SNI 정합) + 매홉 재검증(redirect NEVER, MAX 3) + peer 재검증(rebinding) + size cap + timeout + Content-Type + graceful
- OG 미리보기(OgPreviewService) + 유니티 피드 폴링(UnityFeedPoller @Scheduled, SchedulingConfig @EnableScheduling, FeedParser RSS/Atom XXE 방어 disallow-doctype) + guid dedupe(ON CONFLICT DO NOTHING)
- 카테고리/피드 운영: PostAdminController/UnityFeedAdminController /admin/** ADMIN 인터셉터 + CSRF 전수. 카테고리 삭제 FK 보호
- 신규 6매퍼 #{} only(${} 0). @MockBean 8. JSP 5(scriptlet+HtmlUtils.htmlEscape, JSTL 의존 부재 정합)

검증: 컨테이너 ./mvnw -o test 287/287 GREEN(신규 44), 회귀 0. L2 격리 throwaway DB contract PASS(keyset row-comparison·alias·insertIgnoreDup ON CONFLICT·FK 거부). adversarial SSRF 감사: rebinding/redirect/scheme/IP인코딩/IPv6 차단 실증, XSS sanitize SOUND. 실 dev DB 무접촉.

backward 보정(동일 커밋 통합): (1) Host restricted-header→fetch 전건 empty+테스트 vacuous → hostname-connect 전환(HTTPS SNI 정합, JVM 플래그 불요) (2) CGNAT 등 차단범위 확장 (3) FeedParser RFC1123 요일-날짜 불일치 robust 파싱.

알려진 잔여: option-b hostname-connect 는 connect 시 재resolve 로 rebinding TOCTOU 창 존재(DNS 캐시로 최소화). 위협모델상 LOW(fetch URL 제출자=ADMIN 피드등록/POST_WRITE OG). HTTPS 실 TLS = L3 스모크 권고.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K3FeMrbtxfTScjrwUukyHD
2026-06-29 11:46:28 +09:00
..
adr fix: harden auth csrf handling 2026-06-16 15:38:44 +09:00
analysis docs: 고도화 로드맵 목적축 재구조 (게임잼 단일프레임 → W1~W4 워크스트림) 2026-06-17 17:20:53 +09:00
architecture fix: harden auth csrf handling 2026-06-16 15:38:44 +09:00
backlog docs: ATP 문서 체계 도입 및 프로젝트 종합 분석 추가 2026-06-16 12:18:56 +09:00
changes docs(jam): W2 게임잼 변경 이력 기록 + 설계 구현추적 갱신 2026-06-24 14:19:14 +09:00
contracts docs: ATP 문서 체계 도입 및 프로젝트 종합 분석 추가 2026-06-16 12:18:56 +09:00
development docs(dev): W2 회고 교훈 3건 반영 — (검증)태그·케이스폴딩 기준·공유헬퍼 grounding 2026-06-24 14:23:12 +09:00
domain docs: ATP 문서 체계 도입 및 프로젝트 종합 분석 추가 2026-06-16 12:18:56 +09:00
feedback docs: ATP 문서 체계 도입 및 프로젝트 종합 분석 추가 2026-06-16 12:18:56 +09:00
graph chore(graph): graphify 양 scope 재생성 메타 갱신 — W1 RBAC + W2 게임잼 (b9d836d→a74bf74) 2026-06-24 14:19:14 +09:00
issues docs: ATP 문서 체계 도입 및 프로젝트 종합 분석 추가 2026-06-16 12:18:56 +09:00
maintenance docs: ATP 문서 체계 도입 및 프로젝트 종합 분석 추가 2026-06-16 12:18:56 +09:00
security fix(reviews): game_review_stats 집계 버그 2건 수정 + W3-2 L3 검증 완료 2026-06-22 17:54:19 +09:00
usage docs(dev): 검증 회고 교훈 반영 — DB-방언 계약 L2 + stale 빌드 가드 2026-06-22 17:58:47 +09:00
work-log docs(jam): W2 게임잼 변경 이력 기록 + 설계 구현추적 갱신 2026-06-24 14:19:14 +09:00
board-ddl.sql feat(board): W3-3 포스팅 보드 — 공지/블로그 + OG 미리보기(SSRF 방어) + 유니티 피드 감시 2026-06-29 11:46:28 +09:00
db-update-query-generator.md Merge PR #1 (docs/project-analysis): ATP 문서 체계 + 프로젝트 종합 분석 2026-06-17 10:00:39 +09:00
game-reviews-ddl.sql fix(reviews): game_review_stats 집계 버그 2건 수정 + W3-2 L3 검증 완료 2026-06-22 17:54:19 +09:00
games-hub-ddl.sql feat(hub): W3-4 메인 허브 keyset 페이징 + 진행중 잼 배너 (단계1+2 통합) 2026-06-29 10:59:17 +09:00
index.md fix: harden auth csrf handling 2026-06-16 15:38:44 +09:00
jam-ddl.sql feat(jam): W2-1 게임잼 엔티티/라이프사이클 — jams/entries/teams + GAME_JAM_MANAGE enforcement + 공개 목록·상세 2026-06-24 10:50:12 +09:00
jam-eval-ddl.sql feat(jam): W2-3 잼 평가 동결 스키마 — jam_criteria/scores/votes/awards + jam_score_stats VIEW (⚠️클러스터 단일권위) 2026-06-24 11:33:19 +09:00
jam-judge-ddl.sql feat(jam): W2-2 심사위원 역할 — jam_judges + JamRoleGate(잼 스코프 게이트) + 자기출품 충돌 2026-06-24 11:15:22 +09:00
profile-management-prompt.md Prepare public repository 2026-05-03 16:13:32 +09:00
rbac-ddl.sql feat(rbac): W1 거버넌스/RBAC — 관리자 콘솔·권한 게이트·세션 epoch 전파 2026-06-23 10:38:57 +09:00
recruit-posts-ddl.sql 페이지 개선 2026-06-13 15:05:12 +09:00
security-hardening-ddl.sql 페이지 개선2 2026-06-13 15:05:18 +09:00
tag-ddl.sql feat(search): W3-1 게임 태그 + 검색 확장 — tags/game_tags/jam_tags/game_views + 다중태그·정렬키·방문수·리뷰 정렬 2026-06-29 10:44:23 +09:00
user-signup-schema.md Merge PR #1 (docs/project-analysis): ATP 문서 체계 + 프로젝트 종합 분석 2026-06-17 10:00:39 +09:00