로컬 데이터베이스

이 문서는 Update API (v4): threatListUpdates.fetch 메서드에 적용됩니다.

데이터베이스 설정

Update API를 사용하는 클라이언트는 로컬 데이터베이스를 설정하고 작업할 세이프 브라우징 목록을 처음 다운로드해야 합니다. 시작하려면 safebrowsing Go 패키지를 빌드 및 배포하거나 이 패키지를 사용하여 자체 구현을 모델링하면 됩니다. 자세한 내용은 https://github.com/google/safebrowsing/을 참조하세요.

데이터베이스 업데이트

최신 위협으로부터 보호하기 위해 클라이언트는 threatListUpdates.fetch 메서드를 사용하여 로컬 세이프 브라우징 목록을 정기적으로 업데이트하는 것이 좋습니다. threatListUpdates.fetch request는 업데이트할 목록을 지정합니다. 클라이언트에 메모리 또는 대역폭 제한이 있으면 요청을 사용하여 업데이트 제약조건을 설정할 수도 있습니다 (제약조건 업데이트 참고). threatListUpdates.fetch 응답은 아래 설명처럼 각 목록의 전체 업데이트 또는 부분 업데이트를 반환합니다.

전체 업데이트

클라이언트가 threatListUpdates.fetch 요청state 필드를 비워 두거나 서버에서 전체 업데이트가 필요하다고 판단하면 전체 업데이트가 반환됩니다. 전체 업데이트의 경우 추가만 반환됩니다. 클라이언트는 업데이트를 적용하고 유효성 검사를 실행하기 전에 로컬 데이터베이스를 삭제해야 합니다.

빈 상태

클라이언트가 목록의 초기 요청을 보내면 전체 업데이트가 반환됩니다. 이 경우 요청의 state 필드는 비어 있게 되고 (제공할 값이 없으므로) 응답의 newClientState 필드는 로컬 목록의 초기 상태를 반환합니다. 클라이언트가 후속 요청에서 state 필드를 의도적으로 비워 두는 경우에도 전체 업데이트가 반환됩니다. 이렇게 하면 전체 업데이트가 강제 실행되고 응답의 newClientState 필드에 새로운 상태가 반환됩니다.

서버 결정

클라이언트가 부분 업데이트만 요청한 경우 세이프 브라우징 서버에서 전체 업데이트를 반환하는 경우가 있습니다. 클라이언트가 처음에 작은 버전의 목록을 다운로드한 후 더 큰 버전의 목록으로 업데이트할 때 이러한 상황이 발생할 수 있습니다. 서버는 전체 목록의 전체 업데이트를 반환합니다. 클라이언트가 장시간 데이터를 다운로드하지 않고 부분 업데이트를 요청하는 경우에도 이 문제가 발생할 수 있습니다. 마찬가지로 서버는 단순히 전체 목록이 포함된 전체 업데이트를 반환합니다.

부분 업데이트

클라이언트가 threatListUpdates.fetch 요청에서 state 필드에 값을 제공하면 부분 업데이트가 반환됩니다(위에서 언급한 바와 같이 서버에서 전체 업데이트가 필요하다고 판단하는 경우는 예외임). 부분 업데이트의 경우 추가삭제가 모두 반환됩니다. 클라이언트는 로컬 데이터베이스의 목록을 업데이트 (추가하기 전에 삭제 적용)한 후 유효성 검사를 수행합니다.

추가

추가는 로컬 데이터베이스에 추가해야 하는 SHA256 해시 프리픽스입니다. 해시 프리픽스의 대부분은 길이가 4바이트이지만 일부 해시 프리픽스의 길이는 4~32바이트일 수 있습니다. 따라서 여러 개의 덧셈 세트가 반환될 수 있습니다. 예를 들어 하나는 4바이트 프리픽스를 포함하고 다른 하나는 5바이트 프리픽스를 포함합니다.

클라이언트가 압축을 지원하는 경우 Rice 압축을 사용하여 응답을 압축할 수 있습니다. 그러나 4바이트 해시 프리픽스만 압축됩니다. 긴 해시 프리픽스는 항상 압축되지 않은 원시 형식으로 전송됩니다 (압축 참고).

이사

삭제는 사전순으로 정렬된 클라이언트 데이터베이스에서 로컬 데이터베이스에서 삭제해야 하는 항목을 가리키는 0 기반 색인입니다. 하나의 삭제 집합만 반환됩니다.

클라이언트가 압축을 지원하는 경우 '쌀 해시' 및 '라이 색인'이 반환됩니다. 압축이 지원되지 않으면 '원시 해시' 및 '원시 색인'이 반환됩니다 (압축 참고).

유효성 검사 확인

전체 업데이트 또는 부분 업데이트와 함께 threatListUpdates.fetch 응답이 반환되면 클라이언트가 유효성 검사를 수행해야 합니다.

클라이언트는 먼저 로컬 데이터베이스의 목록을 업데이트합니다 (추가하기 전에 삭제 적용). 그런 다음 클라이언트는 사전순으로 정렬된 로컬 목록의 SHA256 해시를 계산하고 응답에 반환된 체크섬과 비교합니다. 두 값이 같으면 세이프 브라우징 목록이 '올바른' 것으로 간주됩니다.

두 값이 같지 않으면 세이프 브라우징 목록이 '손상된' 것으로 간주됩니다. 클라이언트는 데이터베이스에서 목록을 지우고 state 필드가 빈 문자열로 설정된 두 번째 업데이트를 다시 실행해야 합니다. 이렇게 하면 전체가 강제로 업데이트되고 완전히 새로운 목록과 상태가 반환됩니다.