Analyse antivirus des fichiers
Discuse analyse les fichiers à la recherche de logiciels malveillants avant qu’ils n’atteignent vos utilisateurs. Il existe deux façons de l’appeler : activer check_antivirus sur POST /api/v2/check pour analyser les URL de documents en plus des autres vérifications, ou utiliser le point de terminaison dédié POST /api/v2/scan pour analyser un seul fichier et obtenir un rapport complet incluant le nom de la menace et le hachage SHA-256.
Pourquoi analyser les fichiers téléversés ?
Le téléversement de fichiers est un vecteur d’attaque courant. Distribuer des logiciels malveillants via votre plateforme met en danger les données de vos utilisateurs, votre réputation et votre propre infrastructure. Analyser chaque fichier avant de le stocker ou de le servir permet de combler cette faille.
Comment fonctionne l’analyse ?
Lorsque vous soumettez l’URL d’un fichier, Discuse télécharge le fichier dans un environnement isolé, l’analyse, puis indique si une menace a été détectée. Les fichiers identiques sont mis en cache, ce qui rend les analyses répétées rapides.
Option 1 : analyser des fichiers dans une requête /check
Transmettez les URL des documents dans content.document_urls et activez check_antivirus. C’est le bon choix lorsque vous modérez un message qui contient également une pièce jointe.
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
}
}'
Une seule requête accepte jusqu’à 5 URL de documents.
Réponse
{
"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
}
]
}
}
}
Le résultat antivirus sous results.antivirus comporte trois champs : status, hit et un tableau details. Chaque entrée de details contient type, details (le nom ou le message de la menace), confidence et result.
Option 2 : analyser un seul fichier avec /api/v2/scan
Le point de terminaison d’analyse dédié renvoie un rapport plus détaillé pour un fichier, incluant le nom de la menace, le hachage du fichier et la durée de l’analyse.
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"
}'
Réponse
{
"hit": true,
"status": "FOUND",
"description": "Trojan.GenericKD.12345678",
"file_name": "uploaded-file.pdf",
"file_hash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"scan_time_ms": 1250
}
Champs de requête /api/v2/scan
| Champ | Type | Notes |
|---|---|---|
api_key |
string | Facultatif dans le corps ; vous pouvez envoyer X-API-Key à la place |
file_url |
string | URL du fichier à analyser |
file_name |
string | Nom de fichier facultatif pour le rapport |
Fournissez file_url. Les données Base64 file_data sont définies dans le schéma, mais ne sont pas encore prises en charge : une requête contenant uniquement file_data renvoie une erreur vous demandant d’utiliser file_url.
Champs de réponse /api/v2/scan
| Champ | Type | Description |
|---|---|---|
hit |
boolean | Vrai lorsqu’un logiciel malveillant a été détecté |
status |
string | OK (sain), FOUND (logiciel malveillant) ou ERROR |
description |
string | Nom de la menace ou message d’erreur |
file_name |
string | Nom du fichier analysé |
file_hash |
string | Hachage SHA-256 du fichier |
scan_time_ms |
number | Durée de l’analyse en millisecondes |
Limites d’utilisation
L’analyse antivirus est disponible uniquement avec les forfaits payants. Chaque fichier analysé est décompté une fois du quota.
| Forfait | Analyses mensuelles | Tarif de dépassement |
|---|---|---|
| Basic | Non disponible | - |
| Gold | 500 | 0,001 $/analyse |
| Platinum | 1 500 | 0,00085 $/analyse (15 % de réduction) |
| Ultimate | 3 000 | 0,00075 $/analyse (25 % de réduction) |
Si un projet ne dispose d’aucun abonnement actif, les analyses antivirus sont refusées.
Bonnes pratiques
Analyser avant le stockage
Analysez un fichier avant de le stocker définitivement, afin qu’un fichier infecté n’entre jamais dans votre système :
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);
}
Bifurquer selon le statut
Distinguez un fichier sain d’une analyse ayant échoué :
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;
}
Réutiliser des URL cohérentes
Les fichiers identiques sont mis en cache. L’utilisation d’URL de fichiers stables permet aux analyses répétées d’être servies depuis le cache au lieu de retélécharger le fichier.
Exemples d’intégration
Node.js (point de terminaison d’analyse dédié)
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 (point de terminaison d’analyse dédié)
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()
Prêt à protéger votre plateforme contre les logiciels malveillants ? Commencez avec Discuse.