Lưu vào bộ nhớ đệm

Tài liệu này áp dụng cho các phương pháp sau:

Giới thiệu về việc lưu vào bộ nhớ đệm

Để giảm mức sử dụng băng thông của ứng dụng và để bảo vệ Google khỏi tình trạng lưu lượng truy cập tăng đột biến, các ứng dụng của cả Bạn cần có Lookup API và Update API để tạo và duy trì bộ nhớ đệm cục bộ cho dữ liệu về các mối đe doạ. Đối với Lookup API, bộ nhớ đệm được dùng để giảm số lượng threatMatches các yêu cầu mà khách hàng gửi tới Google. Đối với Update API, bộ nhớ đệm được dùng để giảm số lượng fullHashes yêu cầu ứng dụng gửi cho Google. Giao thức lưu vào bộ nhớ đệm cho mỗi API là trình bày bên dưới.

API Lookup

Ứng dụng của Lookup API nên lưu từng mục ThreatMatch được trả về vào bộ nhớ đệm trong khoảng thời gian đã xác định bởi trường cacheDuration. Sau đó, khách hàng cần tham khảo bộ nhớ đệm trước khi thực hiện Yêu cầu threatMatches đến máy chủ. Nếu thời lượng bộ nhớ đệm cho một ThreatMatch đã trả về trước đó chưa hết hạn, khách hàng nên giả định rằng mặt hàng đó vẫn không an toàn. Đang lưu ThreatMatch mục vào bộ nhớ đệm có thể làm giảm số lượng yêu cầu API mà ứng dụng đưa ra.

Ví dụ: shouldMatch.find

Nhấp vào đường liên kết đến yêu cầu và phản hồi trong tiêu đề bảng để xem đầy đủ các ví dụ.

Kiểm tra URL
threatMatch Yêu cầu
URL khớp với
Phản hồi về mối đe doạ
Hành vi lưu vào bộ nhớ đệm
"threatEntries": [
 {"url": "http://www.urltocheck.org/"}
]
"matches": [{
 "threat": {"url": "http://www.urltocheck.org/"},
 "cacheDuration": "300.000s"
}]
So khớp.
Khách hàng phải đợi 5 phút trước khi gửi yêu cầu threatMatches mới, trong đó có URL http://www.urltocheck.org/.

Cập nhật API

Để giảm tổng số yêu cầu fullHashes được gửi tới Google bằng Update API, ứng dụng để duy trì bộ nhớ đệm cục bộ. API này thiết lập hai kiểu lưu vào bộ nhớ đệm: tích cực và phủ định.

Lưu vào bộ nhớ đệm tích cực

Để ngăn khách hàng liên tục hỏi về trạng thái của một hàm băm đầy đủ không an toàn cụ thể, mỗi ThreatMatch được trả về chứa thời lượng bộ nhớ đệm dương (do trường cacheDuration xác định), cho biết khoảng thời gian toàn bộ hàm băm được coi là không an toàn.

Lưu vào bộ nhớ đệm phủ định

Để ngăn khách hàng liên tục hỏi về trạng thái của một hàm băm đầy đủ an toàn cụ thể, mỗi phản hồi fullHashes xác định thời lượng bộ nhớ đệm âm cho tiền tố được yêu cầu (được xác định bởi negativeCacheDuration). Thời lượng này cho biết thời lượng mà tất cả hàm băm đầy đủ chứa phần tử được yêu cầu tiền tố sẽ được coi là an toàn cho các danh sách được yêu cầu, ngoại trừ những danh sách được máy chủ trả về dưới dạng không an toàn. Việc lưu vào bộ nhớ đệm này đặc biệt quan trọng vì nó ngăn chặn tình trạng quá tải lưu lượng truy cập có thể xảy ra do xung đột tiền tố hàm băm với một URL an toàn nhận được nhiều lưu lượng truy cập.

Tham khảo bộ nhớ đệm

Khi muốn kiểm tra trạng thái của một URL, trước tiên, ứng dụng sẽ tính toán toàn bộ hàm băm. Nếu toàn bộ tiền tố của hàm băm có trong cơ sở dữ liệu cục bộ, ứng dụng phải tham khảo bộ nhớ đệm trước khi gửi một yêu cầu fullHashes đến máy chủ.

Trước tiên, khách hàng nên kiểm tra xem có lượt truy cập bộ nhớ đệm dương hay không. Nếu có một bộ nhớ đệm xác định chưa hết hạn mục nhập cho toàn bộ hàm băm quan tâm, thì mục nhập này sẽ được coi là không an toàn. Nếu mục bộ nhớ đệm dương đã hết hạn thì ứng dụng phải gửi yêu cầu fullHashes đối với tiền tố cục bộ liên quan. Theo giao thức, nếu máy chủ trả về hàm băm đầy đủ, thì hàm đó sẽ được coi là không an toàn; nếu không, nó sẽ được coi là an toàn.

Nếu không có mục nhập bộ nhớ đệm dương nào cho toàn bộ hàm băm, thì ứng dụng nên kiểm tra xem có giá trị âm không kết quả tìm kiếm trong bộ nhớ cache. Nếu có một mục nhập bộ nhớ đệm phủ định chưa hết hạn cho tiền tố cục bộ được liên kết, toàn bộ hàm băm được coi là an toàn. Nếu mục nhập bộ nhớ đệm phủ định đã hết hạn hoặc không tồn tại, thì ứng dụng phải gửi một yêu cầu fullHashes đối với tiền tố cục bộ được liên kết và diễn giải phản hồi như bình thường.

Cập nhật bộ nhớ đệm

Bộ nhớ đệm của ứng dụng cần được cập nhật mỗi khi nhận được phản hồi fullHashes. Một bộ nhớ đệm dương mục nhập cần được tạo hoặc cập nhật để có hàm băm đầy đủ cho mỗi trường cacheDuration. Tiền tố hàm băm thời lượng âm của bộ nhớ đệm cũng nên được tạo hoặc cập nhật theo negativeCacheDuration của phản hồi .

Nếu yêu cầu fullHashes tiếp theo không trả về giá trị băm đầy đủ hiện mang giá trị dương đã lưu vào bộ nhớ đệm, nên máy khách không cần xoá mục nhập bộ nhớ đệm dương. Đây không phải là vấn đề đáng lo ngại trên thực tế, vì thời lượng của bộ nhớ đệm dương thường ngắn (vài phút) để có thể sửa lỗi dương tính giả.

Tình huống ví dụ

Trong ví dụ sau, giả sử h(url) là tiền tố hàm băm của URL và H(url) là hàm băm đầy đủ của URL. Tức là h(url) = SHA256(url).substr(4), H(url) = SHA256(url).

Bây giờ, giả sử một ứng dụng khách (có bộ nhớ đệm trống) truy cập example.com/ và thấy rằng h(example.com/) là trong cơ sở dữ liệu cục bộ. Máy khách yêu cầu tiền tố hàm băm h(example.com/) có độ dài đầy đủ và nhận lại hàm băm có độ dài đầy đủ H(example.com/) cùng với thời lượng bộ nhớ đệm dương là 5 phút và thời lượng bộ nhớ đệm âm là 1 giờ.

Thời lượng 5 phút dương của bộ nhớ đệm sẽ cho ứng dụng biết hàm băm có độ dài đầy đủ trong bao lâu H(example.com/) phải được xem là không an toàn khi không gửi một yêu cầu fullHashes khác. Sau 5 phút thì khách hàng phải đưa ra một yêu cầu fullHashes khác cho tiền tố h(example.com/) nếu giá trị khách hàng truy cập lại vào example.com/. Ứng dụng nên đặt lại thời lượng bộ nhớ đệm âm của tiền tố hàm băm theo phản hồi mới.

Thời lượng âm của bộ nhớ đệm (1 giờ) sẽ cho ứng dụng biết tất cả các hàm băm có độ dài đầy đủ khác trong bao lâu ngoài H(example.com/) dùng chung tiền tố h(example.com/) phải được xem là an toàn. Cho thời lượng 1 giờ, thì mọi URL sao cho h(URL) = h(example.com/) đều phải được xem là an toàn, và do đó không dẫn đến yêu cầu fullHashes (giả sử H(URL) != H(example.com/)).

Nếu phản hồi fullHashes không chứa kết quả trùng khớp và thời lượng bộ nhớ đệm âm được đặt, thì ứng dụng không được đưa ra bất kỳ yêu cầu fullHashes nào cho bất kỳ tiền tố được yêu cầu nào cho thời lượng bộ nhớ đệm âm.

Nếu phản hồi fullHashes chứa một hoặc nhiều kết quả trùng khớp, thì thời lượng bộ nhớ đệm âm vẫn được đặt cho toàn bộ câu trả lời. Trong trường hợp đó, thời lượng bộ nhớ đệm của một hàm băm đầy đủ sẽ cho biết khoảng thời gian ứng dụng phải giả định rằng hàm băm đủ thời lượng đó là không an toàn. Sau bộ nhớ đệm ThreatMatch thời lượng trôi qua, ứng dụng phải làm mới hàm băm đầy đủ bằng cách đưa ra yêu cầu fullHashes cho tiền tố hàm băm đó nếu URL được yêu cầu khớp với hàm băm đầy đủ hiện có trong bộ nhớ đệm. Trong đó trong trường hợp không áp dụng thời lượng bộ nhớ đệm âm. Thời lượng bộ nhớ đệm âm của phản hồi chỉ áp dụng vào các hàm băm có độ dài đầy đủ không có trong phản hồi fullHashes. Đối với các hàm băm có độ dài đầy đủ không có trong phản hồi, ứng dụng phải không đưa ra bất kỳ yêu cầu fullHashes nào cho đến khi thời lượng bộ nhớ đệm phủ định trôi qua.

Ví dụ: fullHashes.find

Nhấp vào đường liên kết đến yêu cầu và phản hồi trong tiêu đề bảng để xem đầy đủ các ví dụ.

Tiền tố băm
Yêu cầu full Hashes
Hàm băm có độ dài đầy đủ khớp với
Câu trả lời của full Hashes
Hành vi lưu vào bộ nhớ đệm
"threatEntries": [
  {"hash": "0xaaaaaaaa"}
]
"matches": [],
"negativeCacheDuration": "3600.000s"
Không trùng khớp.
Ứng dụng không được gửi bất kỳ yêu cầu fullHashes nào đối với tiền tố hàm băm 0xaaaaaaaa trong ít nhất 1 giờ. Mọi hàm băm có tiền tố 0xaaaaaaaa đều được coi là an toàn trong một giờ.
"threatEntries": [
  {"hash": "0xbbbbbbbb"}
]
"matches": [
 "threat": {"hash": "0xbbbbbbbb0000..."}
 "cacheDuration": "600.000s",
],
"negativeCacheDuration": "300.000s"
Các kết quả có thể trùng khớp.
Khách hàng nên xem xét URL có hàm băm đầy đủ 0xbbbbbbbb0000... không an toàn trong 10 phút. Chiến lược phát hành đĩa đơn khách hàng nên xem xét tất cả các URL khác có tiền tố băm 0xbbbbbbbb an toàn trong 5 phút. Sau 5 phút, thì mục nhập bộ nhớ đệm phủ định cho tiền tố băm sẽ hết hạn. Vì mục nhập bộ nhớ đệm dương cho 0xbbbbbbbb0000... chưa hết hạn, ứng dụng phải gửi yêu cầu fullHashes cho tất cả các hàm băm ngoại trừ cái đó.
"threatEntries": [
  {"hash": "0xcccccccc"}
]
"matches": [
 "threat": {"hash": "0xccccccccdddd..."},
 "cacheDuration": "600.000s"
],
"negativeCacheDuration": "3600.000s"
Các kết quả có thể trùng khớp.
Ứng dụng không được gửi bất kỳ yêu cầu fullHashes nào đối với tiền tố hàm băm 0xcccccc trong ít nhất 1 giờ và giả định tiền tố đó là an toàn — trừ khi toàn bộ hàm băm của URL khớp với hàm băm đầy đủ được lưu vào bộ nhớ đệm 0xccccccdddd.... Trong trường hợp đó, khách hàng nên xem xét URL đó là không an toàn trong 10 phút. Sau 10 phút, hàm băm đầy đủ sẽ hết hạn. Mọi hoạt động tra cứu tiếp theo cho hàm băm đầy đủ đó kích hoạt một yêu cầu fullHashes mới.