SafetyNet Google Safe Browsing API ซึ่งเป็นไลบรารีที่ขับเคลื่อนโดย บริการ Google Play, มีบริการสำหรับระบุว่า Google ได้ทำเครื่องหมาย URL ว่าเป็น ภัยคุกคามที่ทราบหรือไม่
แอปของคุณสามารถใช้ API นี้เพื่อระบุว่า Google ได้จัดประเภท URL ที่เฉพาะเจาะจงว่าเป็นภัยคุกคามที่ทราบหรือไม่ ภายใน SafetyNet จะใช้ไคลเอ็นต์สำหรับโปรโตคอลเครือข่าย Google Safe Browsing v4 ที่พัฒนาโดย Google ทั้งโค้ดไคลเอ็นต์และโปรโตคอลเครือข่าย v4 ได้รับการออกแบบมาเพื่อรักษาความเป็นส่วนตัวของผู้ใช้ รวมถึงลดการใช้แบตเตอรี่และแบนด์วิดท์ให้เหลือน้อยที่สุด ใช้ API นี้เพื่อใช้ประโยชน์จากบริการ Google Safe Browsing บน Android อย่างเต็มที่ด้วยวิธีที่ปรับทรัพยากรให้เหมาะสมที่สุด และไม่ต้องใช้โปรโตคอลเครือข่ายของบริการ
การอัปเดต เวอร์ชัน 5 (v5) ใหม่นี้มีการปรับปรุงที่สำคัญในด้านความสดใหม่ของข้อมูลและความเป็นส่วนตัวผ่านการใช้ Oblivious HTTP
เอกสารนี้อธิบายวิธีใช้ SafetyNet Google Safe Browsing Lookup API เพื่อตรวจสอบ URL หาภัยคุกคามที่ทราบ
ข้อกำหนดในการให้บริการ
การใช้ Google Safe Browsing API แสดงว่าคุณยินยอมที่จะผูกพันตาม ข้อกำหนดในการให้บริการ โปรดอ่านและทำความเข้าใจข้อกำหนดและนโยบายที่เกี่ยวข้องทั้งหมดก่อนเข้าถึง Google Safe Browsing API
ขอและลงทะเบียนคีย์ API ของ Android
สร้างและลงทะเบียนคีย์ API ของ Android ก่อนใช้ Google Safe Browsing API ดูขั้นตอนเฉพาะได้ที่หน้า เริ่มต้นใช้งาน Google Safe Browsing
ใน v5 คุณจะต้องระบุคีย์ API นี้เมื่อสร้างอินสแตนซ์ SafeBrowsingClient
เพิ่มทรัพยากร Dependency ของ SafetyNet API
เพิ่ม SafetyNet API ลงในโปรเจ็กต์ก่อนใช้ Google Safe Browsing API หากใช้ Android Studio ให้เพิ่มทรัพยากร Dependency นี้ลงในไฟล์ Gradle ระดับแอป ดูข้อมูลเพิ่มเติมได้ที่หัวข้อ ป้องกันภัยคุกคามความปลอดภัยด้วย SafetyNet
เริ่มต้น API
หากต้องการใช้ Google Safe Browsing API คุณต้องเริ่มต้น API โดยเรียกใช้
initSafeBrowsing
และรอให้การดำเนินการเสร็จสมบูรณ์ ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่าง
Kotlin
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing)
Java
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing);
ใน v5, GmsCore มีไคลเอ็นต์ Google Safe Browsing คุณต้องรับอินสแตนซ์ SafeBrowsingClient เราได้ปรับปรุงพื้นผิว API เพื่อเพิ่มประสิทธิภาพและลดความซับซ้อน
// Draft interface for the new client
public interface SafeBrowsingClient extends HasApiKey<SafeBrowsingApiOptions> {
Task<SafeBrowsingResponse> lookupUri(String uri, @ThreatType List<Integer> threatTypes, @Protocol int protocol);
Task<SupportedThreatTypesResponse> getSupportedThreatTypes();
}
ขอตรวจสอบ URL
ใช้เมธอด lookupUri เพื่อตรวจสอบว่า URI ก่อให้เกิดภัยคุกคามหรือไม่ คุณต้องระบุโปรโตคอลที่ต้องการ ซึ่งอาจเป็นรายการบล็อกในเครื่อง (v4) หรือการป้องกันแบบเรียลไทม์ (v5)
ส่งคำขอตรวจสอบ URL
API ไม่ขึ้นอยู่กับ Scheme ที่ใช้ คุณจึงส่ง URL พร้อม Scheme หรือไม่ก็ได้ ตัวอย่างเช่น ทั้ง
Kotlin
var url = "https://www.google.com"
Java
String url = "https://www.google.com";
และ
Kotlin
var url = "www.google.com"
Java
String url = "www.google.com";
ใช้ได้
โค้ดต่อไปนี้แสดงวิธีส่งคำขอตรวจสอบ URL
Kotlin
SafetyNet.getClient(this).lookupUri(
url,
SAFE_BROWSING_API_KEY,
SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING
)
.addOnSuccessListener(this) { sbResponse ->
// Indicates communication with the service was successful.
// Identify any detected threats.
if (sbResponse.detectedThreats.isEmpty()) {
// No threats found.
} else {
// Threats found!
}
}
.addOnFailureListener(this) { e: Exception ->
if (e is ApiException) {
// An error with the Google Play services API contains some
// additional details.
Log.d(TAG, "Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}")
// Note: If the status code, s.statusCode,
// is SafetyNetStatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
// you need to call initSafeBrowsing(). It means either you
// haven't called initSafeBrowsing() before or that it needs
// to be called again due to an internal error.
} else {
// A different, unknown type of error occurred.
Log.d(TAG, "Error: ${e.message}")
}
}
Java
SafetyNet.getClient(this).lookupUri(url,
SAFE_BROWSING_API_KEY,
SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING)
.addOnSuccessListener(this,
new OnSuccessListener<SafetyNetApi.SafeBrowsingResponse>() {
@Override
public void onSuccess(SafetyNetApi.SafeBrowsingResponse sbResponse) {
// Indicates communication with the service was successful.
// Identify any detected threats.
if (sbResponse.getDetectedThreats().isEmpty()) {
// No threats found.
} else {
// Threats found!
}
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// An error occurred while communicating with the service.
if (e instanceof ApiException) {
// An error with the Google Play services API contains some
// additional details.
ApiException apiException = (ApiException) e;
Log.d(TAG, "Error: " + CommonStatusCodes
.getStatusCodeString(apiException.getStatusCode()));
// Note: If the status code, apiException.getStatusCode(),
// is SafetyNetStatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
// you need to call initSafeBrowsing(). It means either you
// haven't called initSafeBrowsing() before or that it needs
// to be called again due to an internal error.
} else {
// A different, unknown type of error occurred.
Log.d(TAG, "Error: " + e.getMessage());
}
}
});
ลายเซ็น lookupUri ที่อัปเดตแล้วจะใช้ URI, รายการประเภทภัยคุกคาม และโปรโตคอล
val threatTypes = listOf(ThreatType.TYPE_SOCIAL_ENGINEERING, ThreatType.TYPE_MALWARE)
val protocol = Protocol.REAL_TIME // or Protocol.LOCAL_BLOCK_LIST
safeBrowsingClient.lookupUri(url, threatTypes, protocol)
.addOnSuccessListener { response ->
if (response.detectedThreats.isEmpty()) {
// No threats found
} else {
// Threats detected!
}
}
อ่านคำตอบการตรวจสอบ URL
ใช้ออบเจ็กต์ที่แสดงผล
SafetyNetApi.SafeBrowsingResponse
แล้วเรียกใช้เมธอด
getDetectedThreats
ซึ่งจะแสดงผลรายการออบเจ็กต์
SafeBrowsingThreat
หากรายการที่แสดงผลว่างเปล่า แสดงว่า API ไม่พบภัยคุกคามที่ทราบ
หากรายการไม่ว่างเปล่า ให้เรียกใช้
getThreatType
ในแต่ละองค์ประกอบในรายการเพื่อระบุว่า API ตรวจพบภัยคุกคามที่ทราบประเภทใด
หากต้องการดูภาษาคำเตือนที่แนะนำ โปรดดู คู่มือสำหรับนักพัฒนาซอฟต์แวร์ Safe Browsing API
ระบุประเภทภัยคุกคามที่สนใจ
ค่าคงที่ในคลาส SafeBrowsingThreat มีประเภทภัยคุกคามที่รองรับในปัจจุบัน ดังนี้
| ประเภทภัยคุกคาม | คำจำกัดความ |
|---|---|
TYPE_POTENTIALLY_HARMFUL_APPLICATION |
ประเภทภัยคุกคามนี้ระบุ URL ของหน้าที่มีการแจ้งว่ามีแอปพลิเคชันที่อาจเป็นอันตราย |
TYPE_SOCIAL_ENGINEERING |
ประเภทภัยคุกคามนี้ระบุ URL ของหน้าที่มีการแจ้งว่ามีภัยคุกคามจากวิศวกรรมสังคม |
เมื่อใช้ API คุณจะต้องเพิ่มค่าคงที่ประเภทภัยคุกคามเป็นอาร์กิวเมนต์ คุณสามารถเพิ่มค่าคงที่ประเภทภัยคุกคามได้มากเท่าที่แอปต้องการ แต่ใช้ได้เฉพาะค่าคงที่ที่ไม่ได้ทำเครื่องหมายว่าเลิกใช้งานแล้ว
ปิดเซสชัน Google Safe Browsing
หากแอปไม่จำเป็นต้องใช้ Google Safe Browsing API เป็นระยะเวลานาน ให้ตรวจสอบ URL ที่จำเป็นทั้งหมดภายในแอป แล้วปิดเซสชัน Google Safe Browsing โดยใช้ shutdownSafeBrowsing เมธอดดังนี้
Kotlin
SafetyNet.getClient(this).shutdownSafeBrowsing()
Java
SafetyNet.getClient(this).shutdownSafeBrowsing();
เราขอแนะนำให้คุณเรียกใช้ shutdownSafeBrowsing ใน
เมธอด onPause ของกิจกรรม และเรียกใช้
initSafeBrowsing
ในเมธอด onResume ของกิจกรรม อย่างไรก็ตาม
โปรดตรวจสอบว่า initSafeBrowsing ทำงานเสร็จแล้วก่อนที่จะ
เรียกใช้
lookupUri
การตรวจสอบว่าเซสชันของคุณเป็นเซสชันใหม่เสมอจะช่วยลดโอกาสที่จะเกิดข้อผิดพลาดภายในในแอป
รายละเอียดการป้องกันแบบเรียลไทม์
การอัปเดต v5 มีโหมดการป้องกันแบบเรียลไทม์ ซึ่งช่วยหลีกเลี่ยงปัญหาข้อมูลล้าสมัย (ซึ่งอาจนานถึง 20-50 นาทีใน v4) โดยเปลี่ยนจากโปรโตคอลอนุญาตโดยค่าเริ่มต้น เป็นโปรโตคอลตรวจสอบโดยค่าเริ่มต้น ซึ่งจะช่วยเพิ่มการป้องกันภัยคุกคามที่แพร่กระจายอย่างรวดเร็ว ในโหมดเรียลไทม์ ไคลเอ็นต์จะเก็บรักษาฐานข้อมูลในเครื่องและแคชส่วนกลางของเว็บไซต์ที่น่าจะปลอดภัย เพื่อให้การป้องกันแบบเกือบเรียลไทม์ด้วยข้อมูลภัยคุกคามล่าสุด
ประเภทภัยคุกคามที่รองรับ
API ช่วยให้คุณเลือกประเภทภัยคุกคามที่สำคัญต่อความต้องการของคุณได้ API v5 รองรับประเภทภัยคุกคามที่หลากหลายมากขึ้น ดังนี้
| ค่าคงที่ประเภทภัยคุกคาม | คำอธิบาย |
|---|---|
| NO_THREAT | ไม่มีภัยคุกคาม |
| TYPE_MALWARE | ภัยคุกคามจากมัลแวร์ทั่วไป |
| TYPE_UNWANTED_SOFTWARE | ซอฟต์แวร์หรือแอปพลิเคชันไม่พึงประสงค์ |
| TYPE_POTENTIALLY_HARMFUL_APPLICATION | แอปที่อาจเป็นอันตรายต่ออุปกรณ์หรือผู้ใช้ |
| TYPE_SOCIAL_ENGINEERING | เว็บไซต์ฟิชชิงและเว็บไซต์หลอกลวงอื่นๆ |
| TYPE_TRICK_TO_BILL | หน้าเว็บที่หลอกให้ผู้ใช้ดำเนินการเรียกเก็บเงิน |
| TYPE_BETTER_ADS_VIOLATION | เว็บไซต์ที่ละเมิดมาตรฐานโฆษณาที่ดีกว่า |
| TYPE_MALWARE_OFFLINE | มัลแวร์ออฟไลน์ |
| TYPE_ABUSIVE_EXPERIENCE_VIOLATION | การละเมิดที่ส่งผลให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี |
| TYPE_HIGH_CONFIDENCE_ALLOW_LIST | รายการที่อนุญาตที่มีความเชื่อมั่นสูง |
ข้อมูลที่ Google Safe Browsing API รวบรวม
SafetyNet Safe Browsing API จะรวบรวมข้อมูลต่อไปนี้โดยอัตโนมัติเมื่อสื่อสารกับบริการ Google Safe Browsing บน Android
| ข้อมูล | คำอธิบาย |
|---|---|
| กิจกรรมบนแอป | รวบรวมคำนำหน้าแฮชของ URL หลังจากที่คำนำหน้าแฮชตรงกันในเครื่องเพื่อ ตรวจหา URL ที่เป็นอันตราย |
SafetyNet Google Safe Browsing API จะรวบรวมคำนำหน้าแฮชของ URL เพื่อตรวจหา URL ที่เป็นอันตราย เวอร์ชัน 5 ใช้ Oblivious HTTP เพื่อปกป้องข้อมูลผู้ใช้เพิ่มเติมระหว่างการค้นหาเหล่านี้
แม้ว่าเราจะมุ่งมั่นที่จะสร้างความโปร่งใสมากที่สุดเท่าที่จะทำได้ แต่คุณมีหน้าที่รับผิดชอบแต่เพียงผู้เดียวในการตัดสินใจว่าจะตอบกลับแบบฟอร์มส่วนความปลอดภัยของข้อมูล Google Playที่เกี่ยวกับการเก็บรวบรวมข้อมูล การแชร์ และแนวทางปฏิบัติด้านการรักษาความปลอดภัยข้อมูลผู้ใช้ในแอปอย่างไร