Tutorial: filtrar arquivos e verificar vírus com a Transloadit
À medida que as pessoas levam cada vez mais partes da vida para plataformas digitais, muito se pondera sobre quantos GB de dados contratar. Os riscos também estão aumentando, já que manter seus usuários (e os dados deles) em segurança se tornou mais importante do que nunca.
Seja criando apps nativos, APIs ou aplicações web, é nossa responsabilidade como desenvolvedores dedicar muita reflexão e tempo para proteger nossos usuários de pessoas mal-intencionadas. Ao mesmo tempo, também precisamos garantir que o espaço de armazenamento seja usado de forma otimizada, para liberar mais espaço de armazenamento disponível para todos.
A Transloadit facilita para desenvolvedores o controle do espaço de armazenamento usado durante o processo de codificação de arquivos e oferece métodos confiáveis para filtrar vírus por meio dos Robots /file/filter e /file/virusscan, respectivamente.

O Robot /file/filter
O Robot /file/filter permite rejeitar ou redirecionar arquivos com base em diferentes Steps de codificação. Por exemplo, podemos pedir a este Robot que rejeite arquivos codificados de determinada forma, ou arquivos menores ou maiores que um tamanho específico.
Ele funciona principalmente seguindo os parâmetros accepts e declines, que podem ser
definidos, cada um, como um array com três membros:
- Um valor ou uma variável de Job, como
${file.mime},${file.size} - Um dos seguintes operadores:
=, <, >, <=, >=, !=, regex, !regex - Um valor ou uma variável de Job, como 50 ou “foo”
Vamos ver o exemplo abaixo, que rejeita arquivos com mais de 20 MB:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"files_filtered": {
"use": [":original"],
"robot": "/file/filter",
"result": true,
"declines": [["${file.size}", ">", "20971520"]],
"error_on_decline": true
}
}
}
O Robot /file/virusscan
O Robot /file/virusscan mantém você e seus usuários em segurança ao rejeitar milhões de possíveis trojans, vírus, malware ou outras ameaças maliciosas antes que cheguem à sua plataforma.
Este Robot é construído sobre o ClamAV, o melhor mecanismo antivírus de código aberto disponível. Atualizamos suas assinaturas diariamente.
O exemplo abaixo mostra o uso básico deste Robot:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"virus_scanned": {
"use": [":original"],
"robot": "/file/virusscan",
"result": true,
"error_on_decline": true
}
}
}
Criando a Assembly
Queremos criar uma Assembly que combine os dois Robots, para garantir que todos os uploads de arquivos passem pelas verificações de arquivo e pelas varreduras de vírus que desejamos.
Primeiro, precisamos baixar um arquivo de vírus de teste aqui.
Os arquivos de vírus de teste do link acima não causariam nenhum dano ao seu computador. Eles apenas contêm uma assinatura específica criada pela organização EICAR (European Expert Group for IT Security), projetada especificamente para testar o comportamento funcional de softwares antivírus.
Estas são as Assembly Instructions que usaremos para testar este arquivo de vírus:
{
"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
}
}
}
No primeiro Step, o Robot /upload/handle faz o upload de um arquivo para a Transloadit.
No Step seguinte, o Robot /file/filter filtra qualquer arquivo com tamanho maior que 1 KiB (1.024 bytes).
No Step final, o Robot /file/virusscan rejeita qualquer arquivo que contenha vírus.
Para testar nosso Template recém-criado, basta executar o seguinte código Node.js, passando o caminho de um arquivo de teste local como argumento. Fique à vontade para experimentar você mesmo!
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)
Os resultados
Nossa Assembly parece estar funcionando perfeitamente! Depois de executar o código Node.js acima com dois arquivos (o arquivo de vírus e outro arquivo com 2,9 MB), o painel nos mostra, nas duas ocasiões, que houve erros relacionados aos dois arquivos.


Espero que você tenha gostado de aprender um pouco mais sobre como combinar os Robots /file/filter e /file/virusscan para monitorar melhor o uso do espaço de armazenamento e impedir arquivos infectados de forma confiável.
