VirusTotal API Integration: Panduan Kode & Endpoint

VirusTotal API v3 memungkinkan integrasi sistem keamanan eksternal untuk mendeteksi file berbahaya, URL, domain, dan alamat IP secara otomatis melalui pemindaian multi-antivirus. Endpoint utama menggunakan protokol HTTPS standar RESTful dengan autentikasi berbasis header x-apikey yang diperoleh secara gratis setelah registrasi akun di situs resmi VirusTotal.

Persiapan Kredensial dan Batasan API

Sebelum melakukan integrasi kode, pastikan Anda memahami batasan kuota layanan gratis (Public API) yang dibatasi sebanyak 4 permintaan per menit (requests per minute) dan maksimal 500 permintaan per hari. Untuk kebutuhan enterprise, tersedia layanan Premium API dengan kuota lebih tinggi dan kecepatan proses real-time.

Parameter API Public API (Gratis) Premium API
Rate Limit (Per Menit) 4 requests Ribuan requests
Rate Limit (Per Hari) 500 requests Kustom / Unlimited
Metode Autentikasi Header: x-apikey Header: x-apikey
Format Respon JSON JSON / Webhook

Implementasi Kode Python untuk Analisis URL

Berikut adalah skrip Python menggunakan pustaka requests untuk mengirimkan URL ke endpoint VirusTotal v3 dan mengambil hasil analisis pemindaian keamanannya.

import requests
import time

API_KEY = "MASUKKAN_API_KEY_ANDA_DISINI"
URL_TO_SCAN = "https://example.com"

def scan_url(url):
    endpoint = "https://www.virustotal.com/api/v3/urls"
    headers = {
        "accept": "application/json",
        "x-apikey": API_KEY,
        "content-type": "application/x-www-form-urlencoded"
    }
    data = f"url={url}"
    
    response = requests.post(endpoint, headers=headers, data=data)
    if response.status_code == 200:
        analysis_id = response.json()["data"]["id"]
        print(f"URL berhasil dikirim. ID Analisis: {analysis_id}")
        return analysis_id
    else:
        print(f"Gagal mengirim URL: {response.text}")
        return None

def get_analysis_result(analysis_id):
    endpoint = f"https://www.virustotal.com/api/v3/analyses/{analysis_id}"
    headers = {
        "accept": "application/json",
        "x-apikey": API_KEY
    }
    
    # Menunggu proses pemindaian selesai
    time.sleep(15)
    response = requests.get(endpoint, headers=headers)
    if response.status_code == 200:
        result = response.json()
        stats = result["data"]["attributes"]["stats"]
        print("Hasil Pemindaian:", stats)
    else:
        print(f"Gagal mengambil hasil: {response.text}")

if __name__ == "__main__":
    aid = scan_url(URL_TO_SCAN)
    if aid:
        get_analysis_result(aid)

Langkah Teknis Integrasi Sistem

Penerapan integrasi pada sistem produksi memerlukan penanganan error dan antrean (queue) yang baik agar tidak melanggar batas rate limit:

  1. Simpan API Key dengan Aman: Jangan pernah menuliskan API key secara hardcoded di dalam source code utama. Gunakan Environment Variables (os.environ) atau berkas konfigurasi terenkripsi.
  2. Implementasi Exponential Backoff: Tambahkan logika jeda waktu dinamis atau time.sleep() jika mendapatkan status HTTP 429 (Too Many Requests) dari server VirusTotal.
  3. Validasi Hash File Lokal: Sebelum mengunggah file berukuran besar ke endpoint /files, hitung terlebih dahulu nilai SHA-256 file tersebut dan lakukan pengecekan via endpoint /files/{id} untuk melihat apakah file sudah pernah dipindai sebelumnya.

Troubleshooting Masalah Umum

Kendala yang sering ditemui pengembang saat integrasi meliputi:

  • Error 401 Unauthorized: Kunci API salah atau belum diaktifkan melalui tautan verifikasi email pendaftaran.
  • Error 403 Forbidden: Hak akses endpoint tidak sesuai dengan jenis akun (misalnya mencoba mengakses endpoint premium menggunakan akun gratis).
  • Respon Pending Terlalu Lama: File antrean pemindaian di server sedang padat; gunakan mekanisme polling berkala dengan interval minimal 15 detik.