Pemindaian Antivirus File
Discuse memindai file untuk mendeteksi malware sebelum file tersebut sampai ke pengguna Anda. Ada dua cara untuk menggunakannya: aktifkan check_antivirus pada POST /api/v2/check untuk memindai URL dokumen bersama pemeriksaan lainnya, atau gunakan endpoint khusus POST /api/v2/scan untuk memindai satu file dan mendapatkan laporan lengkap, termasuk nama ancaman dan hash SHA-256.
Mengapa perlu memindai file yang diunggah?
Unggahan file adalah salah satu vektor serangan yang umum. Menyebarkan malware melalui platform Anda dapat membahayakan data pengguna, reputasi, dan infrastruktur Anda sendiri. Memindai setiap file sebelum Anda menyimpan atau menyajikannya akan menutup celah tersebut.
Bagaimana cara kerja pemindaian?
Saat Anda mengirimkan URL file, Discuse mengunduh file tersebut ke lingkungan yang terisolasi, memindainya, lalu mengembalikan informasi apakah ancaman ditemukan. File yang identik akan di-cache sehingga pemindaian berulang dapat berjalan cepat.
Opsi 1: pindai file di dalam permintaan /check
Kirim URL dokumen di content.document_urls dan aktifkan check_antivirus. Ini adalah pilihan yang tepat saat Anda memoderasi pesan yang juga memiliki lampiran.
curl -X POST https://api.discuse.com/api/v2/check \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"content": {
"document_urls": ["https://example.com/uploaded-file.pdf"]
},
"settings": {
"check_antivirus": true
}
}'
Satu permintaan dapat menerima hingga 5 URL dokumen.
Respons
{
"has_violations": true,
"cached": false,
"message": "Malware detected in file",
"results": {
"hits": true,
"antivirus": {
"status": "FOUND",
"hit": true,
"details": [
{
"type": "malware",
"details": "Trojan.GenericKD.12345678",
"result": true
}
]
}
}
}
Hasil antivirus di bawah results.antivirus memiliki tiga field: status, hit, dan array details. Setiap entri details membawa type, details (nama ancaman atau pesan), confidence, dan result.
Opsi 2: pindai satu file dengan /api/v2/scan
Endpoint pemindaian khusus mengembalikan laporan yang lebih kaya untuk satu file, termasuk nama ancaman, hash file, dan durasi pemindaian.
curl -X POST https://api.discuse.com/api/v2/scan \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"file_url": "https://example.com/uploaded-file.pdf",
"file_name": "uploaded-file.pdf"
}'
Respons
{
"hit": true,
"status": "FOUND",
"description": "Trojan.GenericKD.12345678",
"file_name": "uploaded-file.pdf",
"file_hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"scan_time_ms": 1250
}
Field permintaan /api/v2/scan
| Field | Tipe | Catatan |
|---|---|---|
api_key |
string | Opsional di body; Anda dapat mengirim X-API-Key sebagai gantinya |
file_url |
string | URL file yang akan dipindai |
file_name |
string | Nama file opsional untuk laporan |
Sediakan file_url. Base64 file_data didefinisikan dalam skema, tetapi belum didukung — permintaan yang hanya berisi file_data akan mengembalikan error yang meminta Anda menggunakan file_url.
Field respons /api/v2/scan
| Field | Tipe | Deskripsi |
|---|---|---|
hit |
boolean | True saat malware terdeteksi |
status |
string | OK (bersih), FOUND (malware), atau ERROR |
description |
string | Nama ancaman, atau pesan error |
file_name |
string | Nama file yang dipindai |
file_hash |
string | Hash SHA-256 file |
scan_time_ms |
number | Durasi pemindaian dalam milidetik |
Batas penggunaan
Pemindaian antivirus hanya tersedia pada paket berbayar. Setiap file yang dipindai dihitung satu kali terhadap kuota.
| Paket | Pemindaian Bulanan | Tarif Kelebihan |
|---|---|---|
| Basic | Tidak tersedia | - |
| Gold | 500 | $0.001/scan |
| Platinum | 1,500 | $0.00085/scan (diskon 15%) |
| Ultimate | 3,000 | $0.00075/scan (diskon 25%) |
Jika sebuah proyek tidak memiliki langganan aktif, pemindaian antivirus akan ditolak.
Praktik terbaik
Pindai sebelum penyimpanan
Pindai file sebelum menyimpannya secara permanen, sehingga file yang terinfeksi tidak pernah masuk ke sistem Anda:
async function handleFileUpload(fileUrl, fileName) {
const result = await scanFile(fileUrl, fileName);
if (result.hit) {
throw new Error('Infected file detected: ' + result.description);
}
await storeFile(fileUrl);
}
Buat percabangan berdasarkan status
Bedakan file yang bersih dari pemindaian yang gagal:
const result = await scanFile(fileUrl, fileName);
switch (result.status) {
case 'FOUND': await rejectAndNotify(fileUrl, result.description); break;
case 'ERROR': await quarantineForReview(fileUrl); break;
case 'OK': await storeFile(fileUrl); break;
}
Gunakan ulang URL yang konsisten
File yang identik akan di-cache. Menggunakan URL file yang stabil memungkinkan pemindaian berulang dikembalikan dari cache alih-alih mengunduh ulang.
Contoh integrasi
Node.js (endpoint pemindaian khusus)
async function scanFile(fileUrl, fileName) {
const response = await fetch('https://api.discuse.com/api/v2/scan', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.DISCUSE_API_KEY
},
body: JSON.stringify({ file_url: fileUrl, file_name: fileName })
});
return response.json();
}
Python (endpoint pemindaian khusus)
import os
import requests
def scan_file(file_url, file_name=None):
response = requests.post(
'https://api.discuse.com/api/v2/scan',
headers={
'Content-Type': 'application/json',
'X-API-Key': os.environ['DISCUSE_API_KEY']
},
json={'file_url': file_url, 'file_name': file_name}
)
return response.json()
Siap melindungi platform Anda dari malware? Mulai dengan Discuse.