फ़ाइल एंटीवायरस स्कैनिंग
Discuse फ़ाइलों को आपके उपयोगकर्ताओं तक पहुँचने से पहले मैलवेयर के लिए स्कैन करता है। इसे कॉल करने के दो तरीके हैं: अन्य जाँचों के साथ दस्तावेज़ URLs स्कैन करने के लिए POST /api/v2/check पर check_antivirus सक्षम करें, या किसी एक फ़ाइल को स्कैन करने और खतरे के नाम व SHA-256 हैश सहित पूरी रिपोर्ट पाने के लिए समर्पित POST /api/v2/scan endpoint का उपयोग करें।
अपलोड की गई फ़ाइलें क्यों स्कैन करें?
फ़ाइल अपलोड एक आम अटैक वेक्टर है। आपके प्लेटफ़ॉर्म के ज़रिए मैलवेयर वितरित होने से उपयोगकर्ता डेटा, आपकी प्रतिष्ठा और आपके अपने इंफ़्रास्ट्रक्चर को जोखिम हो सकता है। हर फ़ाइल को स्टोर या सर्व करने से पहले स्कैन करने से यह कमी दूर हो जाती है।
स्कैनिंग कैसे काम करती है?
जब आप कोई फ़ाइल URL सबमिट करते हैं, तो Discuse फ़ाइल को एक अलग-थलग वातावरण में डाउनलोड करता है, उसे स्कैन करता है, और बताता है कि कोई खतरा मिला या नहीं। समान फ़ाइलों को कैश किया जाता है, इसलिए दोबारा स्कैन तेज़ होते हैं।
विकल्प 1: /check अनुरोध के अंदर फ़ाइलें स्कैन करें
content.document_urls में दस्तावेज़ URLs पास करें और check_antivirus सक्षम करें। जब आप ऐसे संदेश को मॉडरेट कर रहे हों जिसके साथ कोई अटैचमेंट भी हो, तो यह सही कॉल है।
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
}
}'
एक अनुरोध में अधिकतम 5 दस्तावेज़ URLs स्वीकार किए जाते हैं।
प्रतिक्रिया
{
"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
}
]
}
}
}
results.antivirus के तहत antivirus परिणाम में तीन फ़ील्ड होते हैं: status, hit, और एक details array। हर details entry में type, details (खतरे का नाम या संदेश), confidence, और result होता है।
विकल्प 2: /api/v2/scan के साथ एक फ़ाइल स्कैन करें
समर्पित scan endpoint एक फ़ाइल के लिए अधिक समृद्ध रिपोर्ट लौटाता है, जिसमें खतरे का नाम, फ़ाइल hash, और scan duration शामिल होते हैं।
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"
}'
प्रतिक्रिया
{
"hit": true,
"status": "FOUND",
"description": "Trojan.GenericKD.12345678",
"file_name": "uploaded-file.pdf",
"file_hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"scan_time_ms": 1250
}
/api/v2/scan अनुरोध फ़ील्ड
| फ़ील्ड | प्रकार | नोट्स |
|---|---|---|
api_key |
string | Body में वैकल्पिक; इसके बजाय आप X-API-Key भेज सकते हैं |
file_url |
string | स्कैन की जाने वाली फ़ाइल का URL |
file_name |
string | रिपोर्ट के लिए वैकल्पिक filename |
file_url दें। Base64 file_data schema में परिभाषित है, लेकिन यह अभी समर्थित नहीं है — केवल file_data वाला अनुरोध एक error लौटाता है और आपसे file_url उपयोग करने को कहता है।
/api/v2/scan प्रतिक्रिया फ़ील्ड
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
hit |
boolean | जब malware मिला हो तो True |
status |
string | OK (clean), FOUND (malware), या ERROR |
description |
string | खतरे का नाम, या error message |
file_name |
string | स्कैन किया गया filename |
file_hash |
string | फ़ाइल का SHA-256 hash |
scan_time_ms |
number | स्कैन अवधि milliseconds में |
उपयोग सीमाएँ
Antivirus scanning केवल paid plans पर उपलब्ध है। स्कैन की गई हर फ़ाइल quota में एक बार गिनी जाती है।
| प्लान | मासिक स्कैन | Overage दर |
|---|---|---|
| Basic | उपलब्ध नहीं | - |
| Gold | 500 | $0.001/scan |
| Platinum | 1,500 | $0.00085/scan (15% छूट) |
| Ultimate | 3,000 | $0.00075/scan (25% छूट) |
यदि किसी project की कोई active subscription नहीं है, तो antivirus scans अस्वीकार कर दिए जाते हैं।
सर्वोत्तम तरीके
स्टोरेज से पहले स्कैन करें
किसी फ़ाइल को स्थायी रूप से स्टोर करने से पहले स्कैन करें, ताकि संक्रमित फ़ाइल कभी आपके system में प्रवेश ही न करे:
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);
}
Status के आधार पर branch करें
एक clean फ़ाइल और असफल scan के बीच अंतर करें:
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;
}
समान URLs दोबारा इस्तेमाल करें
समान फ़ाइलों को cache किया जाता है। स्थिर file URLs का उपयोग करने से repeat scans दोबारा download करने के बजाय cache से लौट सकते हैं।
इंटीग्रेशन उदाहरण
Node.js (समर्पित scan endpoint)
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 (समर्पित scan endpoint)
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()
अपने प्लेटफ़ॉर्म को malware से सुरक्षित करने के लिए तैयार हैं? Discuse के साथ शुरुआत करें.