กำลังแคช

เอกสารนี้ใช้กับวิธีการต่อไปนี้

เกี่ยวกับการแคช

หากต้องการลดการใช้แบนด์วิดท์ของไคลเอ็นต์และปกป้อง Google จากการรับส่งข้อมูลที่เพิ่มขึ้นอย่างรวดเร็ว ไคลเอ็นต์ของทั้ง Lookup API และ Update API จะต้องสร้างและรักษาแคชของข้อมูลภัยคุกคามไว้ในเครื่อง สำหรับ Lookup API จะมีการใช้แคชเพื่อลดจำนวนคำขอ threatMatches ที่ไคลเอ็นต์ส่งไปยัง Google สำหรับ API การอัปเดต ระบบจะใช้แคชเพื่อลดจำนวนคำขอ fullHashes รายการที่ไคลเอ็นต์ส่งไปยัง Google โปรโตคอลการแคชสำหรับ API แต่ละรายการมีอธิบายไว้ด้านล่าง

API การค้นหา

ไคลเอ็นต์ของ Lookup API ควรแคชแต่ละรายการที่แสดง ThreatMatch รายการตามระยะเวลาที่กำหนดโดยช่อง cacheDuration จากนั้นไคลเอ็นต์จะต้องดูแคชก่อนส่งคำขอ threatMatches ที่ตามมาไปยังเซิร์ฟเวอร์ หากระยะเวลาของแคชสำหรับ ThreatMatch ที่ส่งคืนก่อนหน้านี้ยังไม่หมดอายุ ไคลเอ็นต์ควรถือว่ารายการยังไม่ปลอดภัย การแคช ThreatMatch รายการอาจลดจำนวนคำขอ API ที่ไคลเอ็นต์สร้างขึ้น

ตัวอย่าง: ThreatMatches.find

คลิกลิงก์คำขอและการตอบกลับในส่วนหัวของตารางเพื่อดูตัวอย่างทั้งหมด

การตรวจสอบ URL
คำขอ threatMatch
URL ตรงกัน
การตอบกลับ threatMatches
ลักษณะการแคช
"threatEntries": [
 {"url": "http://www.urltocheck.org/"}
]
"matches": [{
 "threat": {"url": "http://www.urltocheck.org/"},
 "cacheDuration": "300.000s"
}]
การจับคู่
ไคลเอ็นต์ต้องรอ 5 นาทีก่อนที่จะส่งคำขอ threatMatches ใหม่ที่มี URL http://www.urltocheck.org/

อัปเดต API

หากต้องการลดจำนวนโดยรวมของคำขอ fullHashes รายการที่ส่งไปยัง Google โดยใช้ Update API ไคลเอ็นต์จะต้องรักษาแคชในเครื่องไว้ API สร้างการแคช 2 ประเภท ได้แก่ เชิงบวกและเชิงลบ

การแคชเชิงบวก

เพื่อป้องกันไม่ให้ลูกค้าถามถึงสถานะของแฮชเต็มที่ไม่ปลอดภัยหนึ่งๆ ซ้ำหลายครั้ง แต่ละ ThreatMatch ที่แสดงผลจะมีระยะเวลาแคชเป็นบวก (ตามที่กำหนดโดยช่อง cacheDuration) ซึ่งระบุระยะเวลาที่ระบบพิจารณาว่าแฮชแบบเต็มนั้นไม่ปลอดภัย

การแคชเชิงลบ

เพื่อป้องกันไม่ให้ไคลเอ็นต์ถามถึงสถานะของแฮชเต็มปลอดภัยหนึ่งๆ ซ้ำๆ การตอบกลับ fullHashes แต่ละรายการจะกำหนดระยะเวลาแคชเชิงลบสำหรับคำนำหน้าที่ขอ (ตามที่กำหนดโดยช่อง negativeCacheDuration) ระยะเวลานี้จะระบุระยะเวลาที่ถือว่าแฮชแบบเต็มทั้งหมดที่มีคำนำหน้าตามที่ขอนั้นปลอดภัยสำหรับรายการที่ขอ ยกเว้นรายการที่เซิร์ฟเวอร์แสดงผลว่าไม่ปลอดภัย การแคชนี้มีความสำคัญอย่างยิ่งเนื่องจากจะช่วยป้องกันการรับส่งข้อมูลที่มากเกินไป ซึ่งอาจเกิดจากความขัดแย้งของคำนำหน้าแฮชกับ URL ที่ปลอดภัยที่มีการเข้าชมจำนวนมาก

การให้คำปรึกษาเกี่ยวกับแคช

เมื่อไคลเอ็นต์ต้องการตรวจสอบสถานะของ URL ไคลเอ็นต์จะคํานวณแฮชแบบเต็มก่อน หากมีคำนำหน้าของแฮชแบบเต็มในฐานข้อมูลในเครื่อง ไคลเอ็นต์ควรปรึกษาแคชก่อนที่จะส่งคำขอ fullHashes ไปยังเซิร์ฟเวอร์

ขั้นแรก ไคลเอ็นต์ควรตรวจสอบการพบแคชเป็นบวก หากมีรายการแคชเชิงบวกที่ยังไม่หมดอายุสำหรับแฮชแบบเต็มของความสนใจ จะถือว่ารายการนั้นไม่ปลอดภัย หากรายการแคชเชิงบวกหมดอายุ ไคลเอ็นต์ต้องส่งคำขอ fullHashes สำหรับคำนำหน้าในเครื่องที่เกี่ยวข้อง ตามโปรโตคอล หากเซิร์ฟเวอร์แสดงผลแฮชแบบเต็ม จะถือว่าเซิร์ฟเวอร์นั้นไม่ปลอดภัย มิฉะนั้นจะถือว่าปลอดภัย

หากไม่มีรายการแคชที่เป็นบวกสำหรับแฮชแบบเต็ม ไคลเอ็นต์ควรตรวจหา Hit แคชเชิงลบ หากมีรายการแคชเชิงลบที่ยังไม่หมดอายุสำหรับคำนำหน้าในเครื่องที่เกี่ยวข้อง แฮชแบบเต็มจะถือว่าปลอดภัย หากรายการแคชเชิงลบหมดอายุหรือไม่มีอยู่ ไคลเอ็นต์ต้องส่งคำขอ fullHashes สำหรับคำนำหน้าในเครื่องที่เกี่ยวข้องและตีความการตอบกลับตามปกติ

กำลังอัปเดตแคช

ควรอัปเดตแคชของไคลเอ็นต์เมื่อใดก็ตามที่ได้รับการตอบกลับจาก fullHashes ควรสร้างหรืออัปเดตรายการแคชเชิงบวกสำหรับแฮชแบบเต็มในช่อง cacheDuration คุณควรสร้างหรืออัปเดตระยะเวลาของแคชเชิงลบของคำนำหน้าแฮชตามช่อง negativeCacheDuration ของการตอบกลับด้วย

หากคำขอ fullHashes ที่ตามมาไม่แสดงผลแฮชแบบเต็มซึ่งมีการแคชในเชิงบวกอยู่ในขณะนี้ ไคลเอ็นต์ไม่จำเป็นต้องนำรายการแคชเชิงบวกออก กรณีนี้ไม่น่ากังวลในทางปฏิบัติ เนื่องจากโดยปกติแล้วแคชที่เป็นค่าบวกจะสั้น (2-3 นาที) เพื่อให้สามารถแก้ไขผลบวกลวงได้อย่างรวดเร็ว

สถานการณ์ตัวอย่าง

ในตัวอย่างต่อไปนี้ สมมติว่า h(url) คือคำนำหน้าแฮชของ URL และ H(url) คือแฮชแบบเต็มของ URL นั่นคือ h(url) = SHA256(url).substr(4), H(url) = SHA256(url)

สมมติว่าไคลเอ็นต์ (ที่มีแคชว่างเปล่า) เข้าชม example.com/ และเห็นว่า h(example.com/) อยู่ในฐานข้อมูลของเครื่อง ไคลเอ็นต์จะขอแฮชแบบเต็มสำหรับคำนำหน้าแฮช h(example.com/) และรับแฮชแบบเต็ม H(example.com/) กลับมาโดยมีระยะเวลาแคชแบบเต็มที่ 5 นาที และระยะเวลาของแคชเชิงลบอยู่ที่ 1 ชั่วโมง

ระยะเวลาที่แคชที่เป็นบวก 5 นาทีจะบอกไคลเอ็นต์ว่าแฮชแบบเต็มความยาว H(example.com/) ต้องถือว่าไม่ปลอดภัยเป็นระยะเวลาเท่าใดโดยไม่ส่งคำขอ fullHashes อีก หลังจากผ่านไป 5 นาที ไคลเอ็นต์จะต้องส่งคำขอ fullHashes อีกรายการหนึ่งสำหรับคำนำหน้า h(example.com/) หากลูกค้าเข้าชม example.com/ อีกครั้ง ไคลเอ็นต์ควรรีเซ็ตระยะเวลาแคชเชิงลบของคำนำหน้าแฮชตามการตอบกลับใหม่

ระยะเวลาที่แคชเชิงลบ 1 ชั่วโมงจะบอกไคลเอ็นต์ว่าแฮชแบบเต็มอื่นๆ ทั้งหมดนอกเหนือจาก H(example.com/) ที่ใช้คํานําหน้าเดียวกันของ h(example.com/) ต้องถือว่าปลอดภัยเป็นระยะเวลาเท่าใด ในช่วงเวลา 1 ชั่วโมง URL ทั้งหมดที่ h(URL) = h(example.com/) ต้องถือว่าปลอดภัย และจะไม่ส่งผลให้มีคำขอ fullHashes (สมมติว่า H(URL) != H(example.com/))

หากการตอบกลับ fullHashes มีรายการที่ตรงกัน 0 และมีการตั้งค่าระยะเวลาของแคชเชิงลบ ไคลเอ็นต์ต้องไม่ส่งคำขอ fullHashes สำหรับคำนำหน้าที่ขอใดๆ สำหรับระยะเวลาแคชเชิงลบที่ระบุ

หากการตอบกลับ fullHashes มีรายการที่ตรงกันอย่างน้อย 1 รายการ ระบบจะยังคงตั้งค่าระยะเวลาของแคชเชิงลบสำหรับการตอบกลับทั้งหมด ในกรณีดังกล่าว ระยะเวลาของแคชของแฮชแบบเต็มรายการเดียวจะระบุระยะเวลาที่ไคลเอ็นต์จะถือว่าแฮชแบบเต็มความยาวนั้นไม่ปลอดภัย หลังจากพ้นระยะเวลาของแคช ThreatMatch ไคลเอ็นต์จะต้องรีเฟรชแฮชแบบเต็มด้วยการส่งคำขอ fullHashes สำหรับคำนำหน้าแฮชนั้นหาก URL ที่ขอตรงกับแฮชแบบความยาวเต็มที่มีอยู่ในแคช ในกรณีดังกล่าว จะไม่มีการใช้ระยะเวลาของแคชเชิงลบ ระยะเวลาแคชเชิงลบของการตอบกลับจะมีผลกับแฮชแบบเต็มที่ไม่ได้แสดงอยู่ในการตอบกลับ fullHashes เท่านั้น สำหรับแฮชแบบเต็มที่ไม่ปรากฏในการตอบกลับ ไคลเอ็นต์ต้องไม่ออกคำขอ fullHashes จนกว่าจะพ้นระยะเวลาของแคชเชิงลบ

ตัวอย่าง: fullHashes.find

คลิกลิงก์คำขอและการตอบกลับในส่วนหัวของตารางเพื่อดูตัวอย่างทั้งหมด

คำนำหน้าแฮช
คำขอแฮชแบบเต็ม
การจับคู่แฮชแบบเต็ม
การตอบกลับการแฮชแบบเต็ม
ลักษณะการแคช
"threatEntries": [
  {"hash": "0xaaaaaaaa"}
]
"matches": [],
"negativeCacheDuration": "3600.000s"
ไม่มีรายการที่ตรงกัน
ไคลเอ็นต์ต้องไม่ส่งคำขอ fullHashes สำหรับคำนำหน้าแฮช 0xaaaaaaa เป็นเวลาอย่างน้อย 1 ชั่วโมง แฮชที่มีคำนำหน้า 0xaaaaaaaa จะถือว่าปลอดภัยเป็นเวลา 1 ชั่วโมง
"threatEntries": [
  {"hash": "0xbbbbbbbb"}
]
"matches": [
 "threat": {"hash": "0xbbbbbbbb0000..."}
 "cacheDuration": "600.000s",
],
"negativeCacheDuration": "300.000s"
การจับคู่ที่เป็นไปได้
ไคลเอ็นต์ควรพิจารณา URL ที่มีแฮชแบบเต็ม 0xbbbbbbbb0000... ไม่ปลอดภัยเป็นเวลา 10 นาที ไคลเอ็นต์ควรพิจารณาว่า URL อื่นๆ ทั้งหมดที่มีคำนำหน้าแฮช 0xbbbbbbbb มีความปลอดภัยเป็นเวลา 5 นาที หลังจากผ่านไป 5 นาที คำนำหน้าแฮชที่ขึ้นต้นรายการแคชเชิงลบจะหมดอายุ เนื่องจากรายการแคชที่เป็นบวกสำหรับ 0xbbbbbbbb0000... ยังไม่หมดอายุ ไคลเอ็นต์ควรส่งคำขอ fullHashes สำหรับแฮชทั้งหมด ยกเว้นแฮชนั้น
"threatEntries": [
  {"hash": "0xcccccccc"}
]
"matches": [
 "threat": {"hash": "0xccccccccdddd..."},
 "cacheDuration": "600.000s"
],
"negativeCacheDuration": "3600.000s"
การจับคู่ที่เป็นไปได้
ไคลเอ็นต์ต้องไม่ส่งคำขอ fullHashes สำหรับคำนำหน้าแฮช 0xcccccccc เป็นเวลาอย่างน้อย 1 ชั่วโมงและถือว่าคำนำหน้าดังกล่าวปลอดภัย ยกเว้นในกรณีที่แฮชแบบเต็มของ URL ตรงกับแฮชแบบเต็มที่แคชไว้ 0xccccccccdddd... ในกรณีนี้ ลูกค้าควรพิจารณาว่า URL นั้นไม่ปลอดภัยเป็นเวลา 10 นาที หลังจาก 10 นาที แฮชแบบเต็มจะหมดอายุ การค้นหาแฮชแบบเต็มในครั้งต่อๆ ไปควรทริกเกอร์คําขอ fullHashes ใหม่