Como automatizar a moderação de conteúdo com a Transloadit (NSFW)
A segurança precisa estar no topo das preocupações de todo desenvolvedor nos dias de hoje. Infelizmente, nem todo usuário terá boas intenções com seus uploads de arquivos, e é importante ter medidas para lidar com esse tipo de arquivo. Hoje, vamos analisar várias abordagens que você pode adotar para impedir que diferentes tipos de arquivos maliciosos cheguem aos seus servidores e aos seus usuários finais.
Por que a moderação de conteúdo é importante?
A moderação de conteúdo é essencial para qualquer negócio on-line. Os usuários não querem ser expostos a conteúdo explícito sem querer, e os anunciantes não querem aparecer ao lado dele. Uma moderação de conteúdo eficaz protege tanto a sua marca quanto os seus usuários, mas contratar uma equipe de moderadores de conteúdo em tempo integral pode sair caro. A Transloadit pode ajudar a filtrar conteúdo indesejado e malware, enquanto metadados e hashes de arquivos fornecem sinais adicionais para o seu fluxo de trabalho de moderação. Essas verificações não são uma garantia de segurança nem uma permissão para usar um arquivo. Vamos descobrir como 👇
Rejeitar conteúdo NSFW automaticamente
Você pode usar o nosso Robot /image/describe para gerar uma lista de tags com base na imagem fornecida e, em seguida, filtrar os arquivos que contêm tags como violência explícita, símbolos de ódio ou nudez.
Você pode conferir a lista completa de tags fornecidas tanto pela AWS quanto pelo GCP.
Os rótulos dos provedores podem mudar. Antes de confiar neste filtro, inspecione a saída de /image/describe para
imagens de teste representativas usando format: "json" em uma Assembly de diagnóstico separada. Ajuste o seu
filtro aos rótulos realmente retornados e, depois, use format: "meta" no pipeline de filtragem abaixo.
Agora, vamos ver um Template que usa isso:
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"described": {
"use": ":original",
"robot": "/image/describe",
"explicit_descriptions": true,
"format": "meta",
"granularity": "list",
"provider": "aws"
},
"filtered": {
"use": "described",
"robot": "/file/filter",
"result": true,
"declines": [
["${file.meta.descriptions}", "includes", "Hate Symbols"],
["${file.meta.descriptions}", "includes", "Explicit Nudity"],
["${file.meta.descriptions}", "includes", "Visually Disturbing"]
],
"error_msg": "One file contains explicit content!",
"error_on_decline": true
}
}
}
Aqui, geramos uma lista de descritores para a nossa imagem e, se o nosso filtro detectar alguma das nossas categorias de nível superior nessa lista, o arquivo será rejeitado e a nossa Assembly será interrompida. Publique os resultados filtrados somente depois que a Assembly for concluída com sucesso, e nunca o upload original. Rótulos automáticos podem deixar passar conteúdo ou sinalizar imagens aceitáveis, então escolha as categorias e as regras de revisão humana de acordo com os requisitos da sua aplicação.
Verificar metadados de direitos autorais
Os metadados não conseguem estabelecer se quem fez o upload tem permissão para usar uma imagem. As informações de direitos autorais podem estar ausentes, ter sido removidas ou ser imprecisas, e um aviso de direitos autorais, por si só, não torna um upload não autorizado. Ocultar uma verificação de metadados não é um controle de segurança.
O Template a seguir demonstra apenas um filtro de metadados: arquivos com um campo de direitos autorais preenchido são excluídos dos resultados, enquanto arquivos sem esse campo passam. Um resultado aprovado não equivale a uma liberação de direitos autorais. Mantenha as verificações de permissão e qualquer revisão humana necessária separadas deste exemplo; não o use como um veredito automático sobre direitos autorais.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"filter": {
"use": ":original",
"robot": "/file/filter",
"result": true,
"accepts": [["${file.meta.copyright}", "empty", ""]],
"error_on_decline": false
}
}
}
Detectar malware
Naturalmente, a última coisa que você quer que seus usuários enviem é malware. Seja para chegar a outros usuários ou às suas máquinas críticas, é importante que os vírus sejam barrados o quanto antes.
O nosso Robot /file/virusscan detecta malware para você e cancela a Assembly quando uma varredura detecta uma ameaça. Libere os resultados somente após uma varredura bem-sucedida. A varredura reduz o risco, mas não garante que um arquivo seja inofensivo; mantenha os seus outros controles de upload. Consulte a documentação do Robot e os preços para ver a disponibilidade e as cobranças atuais.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"virus_scanned": {
"use": ":original",
"robot": "/file/virusscan",
"result": true,
"error_on_decline": true
}
}
}
Excluir arquivos conhecidos
Caso um usuário esteja enviando milhares de cópias do mesmo arquivo e, por um motivo ou outro, ele esteja passando pelas suas outras camadas de defesa, você pode pegar o hash do arquivo e adicioná-lo a uma lista de bloqueio. O exemplo a seguir rejeita um arquivo vazio usando o seu digest SHA-256. Substitua esse digest pelo SHA-256 de um arquivo indesejado conhecido, de acordo com a sua própria política. Alterar os bytes de um arquivo altera o seu hash, então uma lista de bloqueio por correspondência exata não detecta cópias modificadas.
Aqui está um Template que tem exatamente esse objetivo.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"hash_files": {
"use": ":original",
"robot": "/file/hash",
"algorithm": "sha256"
},
"filter_files": {
"use": "hash_files",
"robot": "/file/filter",
"result": true,
"error_on_decline": true,
"declines": [["${file.meta.hash}", "===", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"]]
}
}
}
Em resumo, geramos um hash para cada arquivo enviado. Se ele for igual ao hash de um arquivo que queremos evitar, o arquivo não passará pelo filtro.
Conclusão
Como você pode ver, há várias abordagens para filtrar uploads de arquivos. Combine as verificações adequadas com controles de acesso, armazenamento seguro e revisão humana, em vez de depender de um único sinal.
Na Transloadit, estamos sempre buscando maneiras de tornar tudo mais seguro, então, como próxima leitura, que tal dar uma olhada na nossa página de segurança para conhecer algumas das medidas que estamos tomando para isso.
