Google Safe Browsing API adalah layanan verifikasi keamanan URL dari Google yang memungkinkan aplikasi memeriksa apakah suatu tautan masuk dalam daftar hitam situs berbahaya, mencakup malware, rekayasa sosial (phishing), dan perangkat lunak tidak diinginkan (unwanted software). Respons API ini bersifat biner: jika URL aman, Google mengembalikan payload JSON kosong ({}); jika berbahaya, Google mengembalikan detail ancaman beserta platform targetnya.
Metode: Lookup API vs Update API
Google menyediakan dua arsitektur utama untuk Safe Browsing API v4:
| Fitur / Parameter | Lookup API (v4) | Update API (v4) |
|---|---|---|
| Cara Kerja | Kirim URL langsung via HTTP POST ke server Google | Unduh hash prefix lokal lalu bandingkan di server sendiri |
| Privasi Klien | URL dikirim langsung ke endpoint Google | Tinggi; hanya prefix hash parsial yang dikomparasi |
| Latensi | Bergantung pada network round-trip HTTP | Sangat cepat (pencarian lokal di database/RAM) |
| Beban Infrastruktur | Minimal (tanpa database lokal) | Membutuhkan storage & cron job sinkronisasi hash |
| Cocok Untuk | Aplikasi web, backend form validation, bot Telegram | Browser engine, proxy skala enterprise, ISP |
Langkah Mendapatkan Kredensial API
- Buka Google Cloud Console (
console.cloud.google.com). - Buat project baru atau pilih project yang sudah ada.
- Buka menu APIs & Services > Library.
- Cari Safe Browsing API (pilih Safe Browsing API v4), lalu klik Enable.
- Buka menu Credentials, pilih Create Credentials > API Key.
- Batasi akses key (API Restrictions) khusus untuk Safe Browsing API guna mencegah penyalahgunaan kuota.
Struktur Request HTTP POST (Lookup API)
Pemeriksaan URL dilakukan dengan mengirimkan request HTTP POST ke endpoint resmi berikut:
POST https://safebrowsing.googleapis.com/v4/threatMatches:find?key=YOUR_API_KEY
Content-Type: application/jsonBerikut adalah payload JSON standar untuk memeriksa satu atau beberapa tautan sekaligus:
{
"client": {
"clientId": "security-checker-app",
"clientVersion": "1.0.0"
},
"threatInfo": {
"threatTypes": [
"MALWARE",
"SOCIAL_ENGINEERING",
"UNWANTED_SOFTWARE",
"POTENTIALLY_HARMFUL_APPLICATION"
],
"platformTypes": ["ANY_PLATFORM"],
"threatEntryTypes": ["URL"],
"threatEntries": [
{"url": "http://testsafebrowsing.appspot.com/s/malware.html"},
{"url": "https://google.com"}
]
}
}Format Respons dari Google
Jika ditemukan indikasi bahaya, Google merespons dengan HTTP 200 dan daftar ancaman:
{
"matches": [
{
"threatType": "MALWARE",
"platformType": "ANY_PLATFORM",
"threat": {
"url": "http://testsafebrowsing.appspot.com/s/malware.html"
},
"cacheDuration": "300s",
"threatEntryType": "URL"
}
]
}Jika seluruh URL yang dikirim berstatus bersih, response body hanya berupa objek JSON kosong: {}.
Implementasi Kode Python
Berikut adalah script Python siap pakai menggunakan library requests untuk memvalidasi keamanan tautan secara otomatis:
import requests
import json
def check_url_safety(api_key, target_url):
endpoint = f"https://safebrowsing.googleapis.com/v4/threatMatches:find?key={api_key}"
payload = {
"client": {
"clientId": "antigravity-monitor",
"clientVersion": "1.0.0"
},
"threatInfo": {
"threatTypes": [
"MALWARE",
"SOCIAL_ENGINEERING",
"UNWANTED_SOFTWARE",
"POTENTIALLY_HARMFUL_APPLICATION"
],
"platformTypes": ["ANY_PLATFORM"],
"threatEntryTypes": ["URL"],
"threatEntries": [{"url": target_url}]
}
}
response = requests.post(endpoint, json=payload, timeout=10)
if response.status_code != 200:
raise Exception(f"Request gagal: {response.status_code} - {response.text}")
data = response.json()
# Jika data kosong ({}), URL bersih
if not data:
return {"safe": True, "threats": []}
threats = [match["threatType"] for match in data.get("matches", [])]
return {"safe": False, "threats": threats}
# Eksekusi Pengujian
if __name__ == "__main__":
API_KEY = "AIzaSyYOUR_ACTUAL_API_KEY_HERE"
test_url = "http://testsafebrowsing.appspot.com/s/malware.html"
result = check_url_safety(API_KEY, test_url)
if result["safe"]:
print(f"[AMAN] {test_url}")
else:
print(f"[BAHAYA] {test_url} terdeteksi sebagai: {', '.join(result['threats'])}")Kategori Ancaman (Threat Types)
| Kategori Ancaman | Definisi Teknis & Dampak |
|---|---|
MALWARE | Situs menginjeksi virus, trojan, atau script perusak ke perangkat pengguna tanpa izin. |
SOCIAL_ENGINEERING | Halaman phishing yang memalsukan identitas bank/layanan web untuk mencuri password & OTP. |
UNWANTED_SOFTWARE | Situs mendistribusikan program yang mengubah setting browser, adware, atau bundle installer tersembunyi. |
POTENTIALLY_HARMFUL_APPLICATION | Aplikasi (khususnya paket Android/APK) yang mengeksploitasi izin sistem berlebih atau kebocoran data. |
Regulasi Kuota dan Praktik Optimal
- Batas Permintaan Gratis: Penggunaan Google Safe Browsing API v4 gratis hingga kuota default sekitar 10.000 request per hari pada GCP standard. Untuk kebutuhan komersial skala masif atau ISP, Google menyarankan migrasi ke Web Risk API.
- Wajib Canonicalization: Pastikan URL dinormalisasi sebelum dikirim (misalnya menghapus whitespace berlebih, mengonversi huruf besar pada hostname ke lowercase, dan melakukan decoding karakter heksadesimal yang tidak perlu).
- Hormati Cache-Control: Nilai
cacheDurationpada respons ancaman wajib dipatuhi. Simpan hasil URL berbahaya di Redis/in-memory cache lokal selama durasi tersebut untuk menghemat panggilan API dan mengurangi beban latency aplikasi backend.