Migration From V4

Google 세이프 브라우징 v5가 v4 (특히 v4 업데이트 API)에 비해 크게 개선된 점은 데이터의 최신성과 적용 범위입니다. 보호는 클라이언트에서 유지관리하는 로컬 데이터베이스에 크게 의존하므로 로컬 데이터베이스 업데이트의 지연과 크기가 보호 누락의 주요 원인입니다. v4에서 일반적인 클라이언트는 최신 버전의 위협 목록을 가져오는 데 20~50분이 걸립니다. 안타깝게도 피싱 공격은 빠르게 확산됩니다. 2021년 기준으로 공격을 전달하는 사이트의 60% 가 10분 미만으로 운영됩니다. Google 분석에 따르면 누락된 피싱 방지 기능의 약 25~30% 가 이러한 데이터의 오래됨으로 인해 발생합니다. 또한 일부 기기는 시간이 지남에 따라 계속 커지는 Google 세이프 브라우징 위협 목록 전체를 관리할 수 없습니다.

현재 v4 업데이트 API를 사용 중인 경우 로컬 데이터베이스를 재설정하거나 삭제하지 않고도 v4에서 v5로 원활하게 이전할 수 있습니다. 이 섹션에서는 이를 수행하는 방법을 설명합니다.

목록 업데이트 변환

위협 유형, 플랫폼 유형, 위협 항목 유형의 튜플로 목록을 식별하는 V4와 달리 v5에서는 이름으로 목록을 식별합니다. 이렇게 하면 여러 v5 목록이 동일한 위협 유형을 공유할 수 있는 경우 유연성을 제공합니다. 플랫폼 유형과 위협 항목 유형이 v5에서 삭제됩니다.

v4에서는 threatListUpdates.fetch 메서드를 사용하여 목록을 다운로드합니다. v5에서는 hashLists.batchGet 메서드로 전환합니다.

요청을 다음과 같이 변경해야 합니다.

  1. v4 ClientInfo 객체를 완전히 삭제합니다. 전용 필드를 사용하여 클라이언트의 식별자를 제공하는 대신 잘 알려진 User-Agent 헤더를 사용하면 됩니다. 이 헤더에 클라이언트 식별자를 제공하는 데 정해진 형식은 없지만, 공백 문자나 슬래시 문자로 구분된 원래 클라이언트 ID와 클라이언트 버전을 포함하는 것이 좋습니다.
  2. v4 ListUpdateRequest 객체의 경우:
    • 사용 가능한 목록에서 해당 v5 목록 이름을 조회하고 v5 요청에 해당 이름을 제공합니다.
    • threat_entry_type 또는 platform_type과 같은 불필요한 필드를 삭제합니다.
    • v4의 state 필드는 v5 versions 필드와 직접 호환됩니다. v4에서 state 필드를 사용하여 서버에 전송되는 것과 동일한 바이트 문자열을 v5에서 versions 필드를 사용하여 전송하면 됩니다.
    • v4 제약 조건의 경우 v5에서는 SizeConstraints라는 간소화된 버전을 사용합니다. region과 같은 추가 필드는 삭제해야 합니다.

대답을 다음과 같이 변경해야 합니다.

  1. v4 enum ResponseTypepartial_update라는 불리언 필드로 대체됩니다.
  2. 이제 minimum_wait_duration 필드를 0으로 설정하거나 생략할 수 있습니다. 이 경우 클라이언트에게 즉시 다른 요청을 제출하도록 요청합니다. 이는 클라이언트가 SizeConstraints에서 최대 데이터베이스 크기보다 작은 최대 업데이트 크기 제약 조건을 지정한 경우에만 발생합니다.
  3. 32비트 정수의 Rice 디코딩 알고리즘을 조정해야 합니다. 차이점은 인코딩된 데이터가 다른 엔디언으로 인코딩된다는 것입니다. v4와 v5 모두에서 32비트 해시 접두사는 사전순으로 정렬됩니다. 하지만 v4에서는 이러한 접두사가 정렬될 때 리틀 엔디언으로 처리되는 반면 v5에서는 이러한 접두사가 정렬될 때 빅 엔디언으로 처리됩니다. 렉시코그래픽 정렬은 빅엔디안을 사용한 숫자 정렬과 동일하므로 클라이언트에서 정렬을 수행할 필요가 없습니다. Chromium v4 구현의 이러한 정렬 예는 여기에서 확인할 수 있습니다. 이러한 정렬은 삭제할 수 있습니다.
  4. Rice 디코딩 알고리즘은 다른 해시 길이에도 구현해야 합니다.

해시 검색 변환

v4에서는 fullHashes.find 메서드를 사용하여 전체 해시를 가져옵니다. v5의 해당 메서드는 hashes.search 메서드입니다.

요청을 다음과 같이 변경해야 합니다.

  1. 길이가 정확히 4바이트인 해시 접두사만 전송하도록 코드를 구성합니다.
  2. v4 ClientInfo 객체를 완전히 삭제합니다. 전용 필드를 사용하여 클라이언트의 식별자를 제공하는 대신 잘 알려진 User-Agent 헤더를 사용하면 됩니다. 이 헤더에 클라이언트 식별자를 제공하는 데 정해진 형식은 없지만, 공백 문자나 슬래시 문자로 구분된 원래 클라이언트 ID와 클라이언트 버전을 포함하는 것이 좋습니다.
  3. client_states 필드를 삭제합니다. 더 이상 필요하지 않습니다.
  4. threat_types 및 유사한 필드를 포함할 필요가 없습니다.

대답을 다음과 같이 변경해야 합니다.

  1. minimum_wait_duration 필드가 삭제되었습니다. 클라이언트는 필요에 따라 언제든지 새 요청을 발행할 수 있습니다.
  2. v4 ThreatMatch 객체FullHash 객체로 간소화되었습니다.
  3. 캐싱이 단일 캐시 기간으로 단순화되었습니다. 캐시와 상호작용하는 방법은 위의 절차를 참고하세요.