피드로 돌아가기
The Paywall That Wasn't: Debugging a 919-Video Leak on WordPress
Dev.toDev.to
Security

서버 사이드 Gate 구축으로 919개 비디오 유출 완전 차단

The Paywall That Wasn't: Debugging a 919-Video Leak on WordPress

Vicente G. Reyes2026년 6월 30일10intermediate

Context

WordPress 기반의 멤버십 플랫폼에서 WLM과 AIOVG 플러그인 간의 계층 구조 불일치로 인해 Content Protection이 작동하지 않은 설계 결함 발생. 클라이언트 사이드에서 단순 텍스트로만 구현된 UX Paywall로 인해 919개의 유료 비디오가 외부로 완전히 노출된 상태.

Technical Solution

  • template_redirect 훅을 통한 Render 이전 단계의 요청 가로채기 설계
  • Custom Post Type(aiovg_videos) 기반의 일괄 권한 검증 로직 구현으로 관리 포인트 최소화
  • wcs_user_has_subscription 함수를 활용한 Single Source of Truth 기반의 구독 상태 확인
  • Client-side Hiding 방식 대신 Server-side Redirect 및 Exit 처리를 통한 Source URL 유출 원천 차단
  • Vimeo Domain-level Privacy 설정을 통한 외부 도메인 임베드 및 직접 링크 접근 제한

1. 보고된 증상의 역케이스(Non-member 접근 가능 여부)를 반드시 먼저 검증할 것

2. UI 컴포넌트 레벨의 조건부 렌더링을 보안 수단으로 사용하지 말 것

3. 여러 플러그인/시스템 혼용 시 계층 구조(Hierarchy) 전파 범위를 재확인할 것

4. 데이터의 원천(Source of Truth)이 되는 단일 시스템에서만 권한을 판별할 것

원문 읽기