Tutoriel Transloadit : filtrage et analyse antivirus de fichiers
À mesure que les gens transfèrent une part croissante de leur vie vers des plateformes numériques, beaucoup se demandent combien de GB de données ils devraient souscrire. Les enjeux grandissent aussi, car protéger vos utilisateurs et leurs données est devenu plus important que jamais.
Que nous développions des applications natives, des API ou des applications web, il est de notre responsabilité de développeurs de consacrer beaucoup de réflexion et de temps à protéger nos utilisateurs contre les personnes malintentionnées. Parallèlement, nous devons aussi veiller à utiliser l’espace de stockage de façon optimale afin d’offrir davantage de stockage gratuit à tous.
Transloadit permet aux développeurs de contrôler plus facilement l’espace de stockage utilisé lors de l’encodage des fichiers et propose des méthodes fiables pour éliminer les virus, grâce respectivement aux Robots /file/filter et /file/virusscan.

Le Robot /file/filter
Le Robot /file/filter vous permet de rejeter ou de rediriger des fichiers en fonction de différents Steps d’encodage. Par exemple, nous pouvons demander à ce Robot de rejeter les fichiers encodés d’une certaine manière, ou les fichiers plus petits ou plus grands qu’une taille donnée.
Il fonctionne principalement selon les paramètres accepts et declines, qui peuvent chacun recevoir
un tableau de trois éléments :
- Une valeur ou une variable de Job, comme
${file.mime},${file.size} - L’un des opérateurs suivants :
=, <, >, <=, >=, !=, regex, !regex - Une valeur ou une variable de Job, comme 50 ou « foo »
Examinons l’exemple ci-dessous, qui rejette les fichiers dont la taille dépasse 20 MB :
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"files_filtered": {
"use": [":original"],
"robot": "/file/filter",
"result": true,
"declines": [["${file.size}", ">", "20971520"]],
"error_on_decline": true
}
}
}
Le Robot /file/virusscan
Le Robot /file/virusscan vous protège, vous et vos utilisateurs, en rejetant des millions de menaces potentielles, qu’il s’agisse de chevaux de Troie, de virus, de logiciels malveillants ou d’autres menaces malveillantes, avant qu’elles n’atteignent votre plateforme.
Ce Robot repose sur ClamAV, le meilleur moteur antivirus open source disponible. Nous mettons à jour ses signatures quotidiennement.
L’exemple ci-dessous montre une utilisation basique de ce Robot :
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"virus_scanned": {
"use": [":original"],
"robot": "/file/virusscan",
"result": true,
"error_on_decline": true
}
}
}
Création de l’Assembly
Nous voulons créer une Assembly qui combine les deux Robots, afin de garantir que tous les téléversements de fichiers respectent les contrôles de fichiers et les analyses antivirus souhaités.
Tout d’abord, nous devons télécharger un fichier virus de test ici.
Les fichiers virus de test du lien ci-dessus ne causeraient aucun dommage à votre ordinateur. Ils contiennent simplement une signature spécifique créée par l’organisation EICAR (European Expert Group for IT Security), conçue spécifiquement pour tester le comportement fonctionnel des logiciels antivirus.
Voici les Assembly Instructions que nous utiliserons pour tester ce fichier virus :
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"files_filtered": {
"use": [":original"],
"robot": "/file/filter",
"result": true,
"declines": [["${file.size}", ">", "1024"]],
"error_on_decline": true
},
"virus_scanned": {
"use": [":original"],
"robot": "/file/virusscan",
"result": true,
"error_on_decline": true
}
}
}
Dans le premier Step, le Robot /upload/handle téléverse un fichier vers Transloadit.
Dans le Step suivant, le Robot /file/filter écarte tout fichier dont la taille dépasse 1 KiB (1 024 octets).
Dans le dernier Step, le Robot /file/virusscan rejette tout fichier contenant un virus.
Pour essayer notre Template nouvellement créé, il suffit d’exécuter le code Node.js suivant, qui prend en argument le chemin d’un fichier de test local. N’hésitez pas à l’essayer vous-même !
const { Transloadit } = require('transloadit')
const transloadit = new Transloadit({
authKey: process.env.TRANSLOADIT_AUTH_KEY,
authSecret: process.env.TRANSLOADIT_SECRET_KEY,
})
const options = {
files: { file: process.argv[2] },
params: {
steps: {
':original': {
robot: '/upload/handle',
},
files_filtered: {
use: [':original'],
robot: '/file/filter',
result: true,
declines: [['${file.size}', '>', '1024']],
error_on_decline: true,
},
virus_scanned: {
use: [':original'],
robot: '/file/virusscan',
result: true,
error_on_decline: true,
},
},
},
}
transloadit.createAssembly(options)
.then((result) => console.log({ result }))
.catch(console.error)
Les résultats
Notre Assembly semble fonctionner parfaitement ! Après avoir exécuté le code Node.js ci-dessus avec deux fichiers (le fichier virus ainsi qu’un autre fichier de 2,9 MB), le tableau de bord nous indique dans les deux cas que des erreurs sont survenues pour chacun des fichiers.


J’espère que vous avez apprécié d’en apprendre un peu plus sur la façon de combiner les Robots /file/filter et /file/virusscan, afin de mieux surveiller l’utilisation de l’espace de stockage et de bloquer de manière fiable les fichiers infectés.
