동영상이 공개되면 페이지 소스를 읽을 수 있는 누구나 그 주소를 복사할 수 있습니다. 괜찮을 때도 있지만, 그렇지 않은 경우가 많습니다. 다른 사이트가 내 플레이어를 임베드해 내 트래픽을 쓰거나, 라이선스가 일부 국가만 허용하거나, 특정 주소 대역이 계속 라이브러리를 긁어 갈 수 있습니다. UFOLOAD는 이를 위한 여러 제어 기능을 제공하며, 각각 다른 계층에서 동작합니다. 이 글에서는 각 기능이 무엇을 하는지, 일치 규칙이 어떻게 동작하는지, 각 기능의 한계는 어디인지 설명합니다. 스위치 하나만 믿지 말고 합리적으로 조합할 수 있도록요.
제어 기능 한눈에 보기
| 제어 기능 | 제한 대상 | 설정 위치 |
|---|---|---|
| 허용된 임베드 도메인 | iframe으로 내 플레이어를 표시할 수 있는 사이트 | Player studio, 접근 탭 |
| 차단 국가 | 목록에 있는 국가의 시청자 | Player studio, 접근 탭 |
| 차단 IP 주소 | 개별 주소와 마스크 | Player studio, 접근 탭 |
| 허용된 다운로드 도메인 | 다운로드 페이지를 열 수 있는 사이트 | Player studio, 접근 탭 |
| 유효 기간이 있는 서명된 링크 | 재생 주소가 얼마 동안, 누구에게 유효한지 | API, POST /files/{id}/links |
이 목록의 모든 항목은 계정의 플레이어 및 전송 설정에 속하며 모든 동영상에 적용됩니다. 규칙은 모든 요금제에서 사용할 수 있으며, 요금제 페이지에 나와 있듯 다운로드 버튼 자체만 Pro와 Max 요금제로 제한됩니다.
1단계: 임베드를 내 도메인으로 잠그기
임베드 플레이어는 다른 사람의 페이지 안 iframe에서 실행되며, 브라우저는 리퍼러를 통해 그 페이지가 어디인지 알려 줍니다. 플레이어는 그 호스트를 서버에 전달하고, 서버는 내 목록과 비교합니다. 호스트가 목록에 없으면 서버는 403으로 거부하고, 플레이어는 동영상 대신 이용할 수 없다는 메시지를 표시합니다.
일치 규칙은 엄격하므로 정확히 알아 두는 것이 좋습니다:
example.com은 정확히 그 호스트만 허용합니다.www.example.com은 허용하지 않습니다.*.example.com은example.com의 모든 하위 도메인을 허용하지만, 루트인example.com은 허용하지 않습니다. 사이트와 하위 도메인을 모두 포함하려면 두 항목을 모두 등록하세요.- 대소문자는 구분하지 않고 포트와 끝의 점은 무시되므로,
Example.com:8080은example.com과 일치합니다. - 목록에는 최대 100개 항목을 넣을 수 있습니다. 목록이 비어 있으면 어디서나 플레이어를 임베드할 수 있으며, 이것이 기본값입니다.
- 호스트 이름만 적으세요. 실수로 전체 주소를 붙여 넣으면 호스트 부분만 남습니다.
목록을 켜기 전에 스테이징과 미리보기 도메인을 포함해 실제로 임베드하는 모든 호스트를 추가하세요. 내 스테이징 사이트에서 갑자기 동영상에 이용할 수 없다는 메시지가 뜨는 것이 가장 흔한 당황스러운 상황입니다.
도메인 잠금이 하지 못하는 것
이 기능은 누군가 내 iframe을 자기 페이지에 붙여 넣는 식의 가벼운 핫링크를 막습니다. 보안 경계는 아니며, 그 이유를 알아 두는 편이 좋습니다. 이 검사는 브라우저가 보내는 리퍼러에 의존합니다. 페이지가 리퍼러를 제거하면 플레이어는 어디에 임베드되었는지 알 수 없고, 이 경우에는 차단하지 않습니다. 그렇지 않으면 개인정보 설정과 리퍼러 정책 때문에 정상적인 임베드까지 깨지기 때문입니다. 마찬가지로 네트워크 패널에서 서명된 재생 목록 주소를 복사한 작정한 방문자는 만료될 때까지 다른 곳에서 재생할 수 있습니다. 세그먼트는 요청한 페이지가 아니라 링크의 서명으로 검사되기 때문입니다. 동영상의 공개 시청 페이지도 도메인 목록의 제한을 받지 않으며, 링크가 있는 누구나 열 수 있습니다.
따라서 이 목록은 선량한 이웃을 막는 울타리라고 생각하세요. 직접 제공하는 스트림을 더 강하게 제어하려면 아래에서 설명하는 서명된 링크를 사용하세요. 반대로 선택한 사람만 볼 수 있는 동영상이 필요하다면, UFOLOAD에는 비공개 동영상과 DRM이 없다는 점에 유의하세요. 기밀 콘텐츠에 사용하기 전에 자체 호스팅 대 무료 플랫폼 대 동영상 호스팅을 읽어 보세요.
2단계: 국가와 IP 주소 차단하기
국가와 IP 규칙은 두 곳에서 적용됩니다. 시청자가 시청 페이지나 임베드 페이지를 열 때, 그리고 전송 계층에서 재생 목록과 세그먼트를 요청할 때마다입니다. 전송 단계의 검사는 캐시되지 않고 요청마다 이루어지므로, 추가한 규칙은 바로 다음 세그먼트부터 적용되며 이미 링크를 가진 사람도 그 링크를 갖고 있는 것만으로 규칙을 우회할 수 없습니다.
- 국가는 쉼표로 구분한 ISO 3166-1 alpha-2 두 글자 코드입니다(예:
US, CN, RU). 시청자의 국가는 IP 주소로 지리 위치 데이터베이스에서 조회합니다. 각 목록에는 최대 100개 항목을 넣을 수 있습니다. - IP 주소는
203.0.113.7같은 단일 주소나,203.0.113.*처럼 마지막 옥텟에 별표를 쓴 마스크로 지정할 수 있으며, 마스크는 256개 주소 범위 전체를 포함합니다. IPv6 주소는 정확한 주소로 등록할 수 있습니다.
실무상 주의할 점이 두 가지 있습니다. 마스크는 무딘 도구입니다. 모바일이나 사무실 네트워크에 .* 마스크를 걸면 그 뒤에 있는 정상적인 사용자까지 모두 차단됩니다. 그리고 IP 기반 위치는 그 뒤의 주소 데이터만큼만 정확합니다. VPN이나 프록시를 쓰는 방문자는 출구 노드가 있는 곳에 있는 것처럼 보이므로, 국가 차단은 원치 않는 트래픽을 줄이거나 지역 라이선스를 성실히 지키는 수단이지 보장이 아닙니다.
동영상을 소유한 조직의 구성원으로 로그인해 있는 동안에는 내 규칙에 차단되지 않으며, 저희 지원팀도 마찬가지입니다. 내 국가를 차단해도 라이브러리에 접근할 수 없게 되지 않도록 일부러 그렇게 만들었지만, 그렇기 때문에 테스트는 로그아웃한 브라우저나 다른 네트워크에서 해야 합니다.
내 플레이어를 위한 서명된 링크
내 페이지에서 hls.js로 스트림을 재생한다면(HLS 동영상 임베드하기 참고) 플레이어가 UFOLOAD 페이지에 허락을 구하지 않으므로 도메인 목록은 관여하지 않습니다. 제어는 링크 자체에서 이루어집니다. POST /api/v1/files/{id}/links는 유효 기간이 60초에서 30일인 재생 및 다운로드 링크를 발급합니다. bind_ip를 추가하면 링크가 IPv4 주소 하나에 묶이고, bind_cookie를 추가하면 내 서버가 방문자에게 설정한 쿠키 값에 묶입니다. 이때 응답에는 요청과 함께 보내야 할 쿠키 이름이 포함됩니다.
curl -X POST "https://ufoload.com/api/v1/files/FILE_ID/links" \
-H "Authorization: Bearer $UFOLOAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ttl": 600, "bind_ip": "203.0.113.7"}'짧은 유효 기간과 바인딩을 함께 쓰는 것이 가장 강력한 방법입니다. 내 페이지에서 복사한 링크는 몇 분 안에 쓸모없어지고, 다른 주소에서는 처음부터 쓸모가 없습니다. 대신 페이지를 볼 때마다 서버에서 링크를 발급해야 하며, 이 방식은 업로드 및 API 가이드와 API 문서에서 설명합니다.
다운로드 도메인
Pro와 Max 요금제의 플레이어는 다운로드 버튼을 표시할 수 있습니다. 허용된 다운로드 도메인이라는 별도 목록은 임베드 목록과 똑같이 동작하지만, 어떤 사이트가 다운로드 페이지를 프레임 안에서 열 수 있는지를 제어합니다. 비워 두면 모든 사이트가 허용됩니다. 시청 페이지와 마찬가지로, UFOLOAD에서 다운로드 페이지를 직접 여는 방문자는 제한되지 않습니다.
3단계: 저장하고 테스트하기
- 접근 탭에서 목록을 저장하세요.
- 시크릿 창에서 허용된 도메인의 페이지를 열고 동영상이 재생되는지 확인하세요. 하위 도메인 변형도 확인하세요.
- 목록에 없는 도메인, 예를 들어 다른 호스트 이름으로 제공되는 로컬 테스트 페이지에서 같은 임베드를 열고 플레이어에 이용할 수 없다는 메시지가 표시되는지 확인하세요.
- 국가나 IP 규칙은 로그아웃한 상태에서, 가능하다면 규칙에 해당하는 네트워크에서 테스트하세요.
- 내 페이지의 리퍼러 정책은
strict-origin-when-cross-origin처럼 합리적인 값으로 유지하세요.no-referrer정책은 플레이어에게서 호스트를 숨기므로 목록을 적용할 수 없게 됩니다.
임베드 목록과 짧은 유효 기간의 서명된 링크를 함께 쓰면 대부분의 실제 상황을 해결할 수 있습니다. 가벼운 핫링크는 입구에서 막히고, 그 이상을 시도하는 사람은 곧 만료될 링크를 얻으려고 애써야 합니다. 광고가 제공되고 플레이어에서 광고를 운영한다면 수익화 가이드에서 광고 형식과 광고 시점 배치 방식을 설명합니다. 플레이어에서 사용할 수 있는 모든 기능은 기능 페이지에 있고, 어떤 업체에든 요구해야 할 접근 제어 기능은 동영상 호스팅 체크리스트에서 확인할 수 있습니다.