Tutorial: filtrado de archivos y escaneo de virus con Transloadit
A medida que las personas trasladan más partes de su vida a plataformas digitales, se piensa mucho en cuántos GB de datos deberían contratar. Lo que está en juego también es cada vez mayor, ya que mantener seguros a tus usuarios, y a sus datos, se ha vuelto más importante que nunca.
Ya sea que estemos creando apps nativas, API o aplicaciones web, es nuestra responsabilidad como desarrolladores invertir una gran cantidad de reflexión y tiempo en mantener a nuestros usuarios a salvo de quienes tienen intenciones maliciosas. Al mismo tiempo, también debemos asegurarnos de que el espacio de almacenamiento se utilice de forma óptima para permitir más almacenamiento libre en todos los ámbitos.
Transloadit facilita a los desarrolladores el control del espacio de almacenamiento utilizado durante el proceso de codificación de archivos, y ofrece métodos confiables para filtrar virus mediante los Robots /file/filter y /file/virusscan, respectivamente.

El Robot /file/filter
El Robot /file/filter te permite rechazar o redirigir archivos hacia distintos Steps de codificación. Por ejemplo, podemos pedirle a este Robot que rechace archivos codificados de una manera particular, o archivos que sean más pequeños / más grandes que un tamaño específico.
Funciona principalmente siguiendo los parámetros accepts y declines, cada uno de los cuales puede
configurarse con un array que contiene tres miembros:
- Un valor o una variable de job, como
${file.mime},${file.size} - Uno de los siguientes operadores:
=, <, >, <=, >=, !=, regex, !regex - Un valor o una variable de job, como 50 o «foo»
Veamos el siguiente ejemplo, que rechaza archivos con un tamaño mayor a 20 MB:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"files_filtered": {
"use": [":original"],
"robot": "/file/filter",
"result": true,
"declines": [["${file.size}", ">", "20971520"]],
"error_on_decline": true
}
}
}
El Robot /file/virusscan
El Robot /file/virusscan te mantiene a ti y a tus usuarios a salvo al rechazar millones de posibles troyanos, virus, malware u otras amenazas maliciosas antes de que lleguen a tu plataforma.
Este Robot está construido sobre ClamAV, el mejor motor antivirus de código abierto disponible. Actualizamos sus firmas a diario.
El siguiente ejemplo muestra el uso básico de este Robot:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"virus_scanned": {
"use": [":original"],
"robot": "/file/virusscan",
"result": true,
"error_on_decline": true
}
}
}
Creación de la Assembly
Queremos crear una Assembly que combine ambos Robots, para garantizar que todas las subidas de archivos cumplan con las comprobaciones de archivos y los escaneos de virus que deseamos.
Primero, tendremos que descargar un archivo de virus de prueba aquí.
Los archivos de virus de prueba del enlace anterior no le harían ningún daño a tu computadora. Simplemente contienen una firma específica creada por la organización EICAR (European Expert Group for IT Security), diseñada específicamente para probar el comportamiento funcional del software antivirus.
Estas son las Assembly Instructions que usaremos para probar este archivo de 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
}
}
}
En el primer Step, el Robot /upload/handle sube un archivo a Transloadit.
En el siguiente Step, el Robot /file/filter filtra cualquier archivo con un tamaño mayor a 1 KiB (1024 bytes).
En el Step final, el Robot /file/virusscan rechaza cualquier archivo que contenga un virus.
Para probar el Template que acabamos de crear, solo tenemos que ejecutar el siguiente código de Node.js, que toma como argumento la ruta a un archivo de prueba local. ¡Anímate a probarlo tú mismo!
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)
Los resultados
¡Nuestra Assembly parece funcionar a la perfección! Después de ejecutar el código de Node.js anterior con dos archivos (el archivo de virus junto con otro archivo de 2,9 MB), el panel nos muestra en ambas ocasiones que hubo errores relacionados con ambos archivos.


Espero que hayas disfrutado aprendiendo un poco más sobre cómo puedes combinar los Robots /file/filter y /file/virusscan, con el fin de monitorear mejor el uso del espacio de almacenamiento y prevenir de forma confiable los archivos infectados.
