DX Security — CSRF 방어 패치 내역
v1.1.0 — 2026-09-02
버그 수정
관리자 페이지 정상 요청 차단 오탐 수정
- 증상: 플러그인 활성화/비활성화 등 관리자 페이지의 정상적인 POST 요청이 "요청 차단됨" 화면으로 차단됨
- 원인:
DX_CSRF_ORIGIN_HARD=true(기본값) 상태에서 브라우저 form submit이 Origin 헤더를 전송하지 않으면ORIGIN_ABSENT판정으로 차단됨 - 수정:
DX_CSRF_ORIGIN_HARD기본값을true→false로 변경- Origin 헤더가 없는 요청은 경고 로그만 기록하고 통과 (코어 CSRF 토큰이 실질적 방어 담당)
- Origin 헤더가 있고 다른 사이트인 경우는 기존과 동일하게 차단
정책 변경
Origin 검증 정책 명확화
| 상황 | v1.0.0 | v1.1.0 |
|---|---|---|
| Origin 있음 + 같은 사이트 | 통과 | 통과 |
| Origin 있음 + 다른 사이트 | 차단 | 차단 (동일) |
| Origin 없음 (form submit 등) | 차단 | 경고 로그 후 통과 |
| null Origin | 차단 | 통과 (CSRF 토큰으로 충분) |
관리자 Step-Up 대상 경로 축소
- v1.0.0: 관리자 모든 경로에 Origin 필수 요구
- v1.1.0: 고위험 경로만 Origin 필수
플러그인 활성화, 게시판 관리 등 일반 관리 작업은 해당하지 않음/admin/security /admin/permission/delete /admin/member/delete /admin/config/reset
보안 원칙 유지
이 수정은 보안 수준을 낮추지 않습니다.
1차 방어: 코어 CSRF 토큰 (randomHex(64) + hash_equals + expire)
→ Origin 없어도 토큰 없으면 차단
2차 방어: Origin 검증 (이 플러그인)
→ Origin이 있고 다른 사이트이면 차단
결론: Origin 없는 요청은 1차 방어(토큰)가 담당
2차 방어(Origin)는 Origin이 있을 때만 작동
v1.0.0 — 2026-09-01
최초 릴리스
- Origin / Referer 검증 (C1)
- JSON body CSRF 토큰 파싱 (C2)
- 인증 경계 CSRF Token Rotation (C3)
- CSRF 실패 감사 로그 (C4)
- 반복 실패 Rate Limit (C5)
- GET 상태변경 감지 및 차단 (C6)
- 관리자 Step-Up CSRF 강화 (C7)
- CSRF 예외 Endpoint 허용목록 관리 (C8)