Cómo moderar contenido automáticamente con Transloadit (NSFW)
La seguridad debe ser una prioridad absoluta para cualquier desarrollador en los tiempos que corren. Por desgracia, no todos los usuarios tendrán buenas intenciones con sus subidas de archivos, y es importante contar con medidas para lidiar con este tipo de archivos. Hoy vamos a ver varios enfoques que puedes adoptar para evitar que distintos tipos de archivos maliciosos lleguen a tus servidores y a tus usuarios finales.
¿Por qué es importante la moderación de contenido?
La moderación de contenido es fundamental para cualquier negocio en línea. Los usuarios no quieren exponerse a contenido gráfico sin desearlo, y los anunciantes no quieren que sus anuncios aparezcan junto a él. Una moderación de contenido eficaz protege tanto tu marca como a tus usuarios, pero contratar a un equipo de moderadores de contenido a tiempo completo puede resultar caro. Transloadit puede ayudarte a filtrar contenido no deseado y malware, mientras que los metadatos y los hashes de archivo aportan señales adicionales para tu flujo de trabajo de moderación. Estas comprobaciones no son una garantía de seguridad ni de que tengas permiso para usar un archivo. Veamos cómo 👇
Rechazar automáticamente el contenido inapropiado (NSFW)
Puedes usar nuestro Robot /image/describe para generar una lista de etiquetas a partir de la imagen proporcionada y, después, filtrar los archivos que contengan etiquetas como violencia explícita, símbolos de odio o desnudez.
Puedes consultar la lista completa de etiquetas que ofrecen tanto AWS como GCP.
Las etiquetas de los proveedores pueden cambiar. Antes de confiar en este filtro, inspecciona la
salida de /image/describe con imágenes de prueba representativas usando format: "json" en una Assembly de
diagnóstico independiente. Ajusta tu filtro a las etiquetas que realmente se devuelven y, después,
usa format: "meta" para el pipeline de filtrado que aparece a continuación.
Ahora, veamos un Template que usa esto:
{
"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
}
}
}
Aquí generamos una lista de descriptores para nuestra imagen y, si nuestro filtro detecta alguna de nuestras categorías de nivel superior en esa lista, el archivo se rechazará y se detendrá nuestra Assembly. Publica únicamente los resultados filtrados después de que la Assembly finalice correctamente, no la subida original. Las etiquetas automáticas pueden pasar por alto contenido o marcar imágenes aceptables, así que elige las categorías y las reglas de revisión humana según los requisitos de tu aplicación.
Comprobar los metadatos de copyright
Los metadatos no permiten determinar si quien sube un archivo tiene permiso para usar una imagen. La información de copyright puede faltar, haberse eliminado o ser inexacta, y un aviso de copyright por sí solo no convierte una subida en no autorizada. Ocultar una comprobación de metadatos no es un control de seguridad.
El siguiente Template demuestra únicamente un filtro de metadatos: los archivos con un campo de copyright no vacío quedan excluidos de sus resultados, mientras que los archivos sin ese campo superan el filtro. Superar el filtro no equivale a una autorización de copyright. Mantén las comprobaciones de permisos y cualquier revisión humana necesaria separadas de este ejemplo; no lo uses como un veredicto automático de copyright.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"filter": {
"use": ":original",
"robot": "/file/filter",
"result": true,
"accepts": [["${file.meta.copyright}", "empty", ""]],
"error_on_decline": false
}
}
}
Detectar malware
Como es lógico, lo último que quieres que suban tus usuarios es malware. Ya sea que llegue a otros usuarios o a las máquinas críticas de tu sistema, es importante detener los virus lo antes posible.
Nuestro Robot /file/virusscan detecta malware por ti y cancela la Assembly cuando un análisis detecta una amenaza. Publica los resultados solo después de un análisis correcto. El análisis reduce el riesgo, pero no puede garantizar que un archivo sea inofensivo; mantén el resto de tus controles de subida. Consulta la documentación del Robot y los precios para conocer la disponibilidad y los cargos actuales.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"virus_scanned": {
"use": ":original",
"robot": "/file/virusscan",
"result": true,
"error_on_decline": true
}
}
}
Excluir archivos conocidos
En caso de que un usuario suba miles de veces el mismo archivo y, por un motivo u otro, este consiga superar tus otras capas de defensa, puedes tomar el hash del archivo y añadirlo a una lista de denegación. El siguiente ejemplo rechaza un archivo vacío usando su digest SHA-256. Sustituye ese digest por el SHA-256 de un archivo no deseado conocido según tu propia política. Cambiar los bytes de un archivo cambia su hash, por lo que una lista de denegación por coincidencia exacta no detecta copias modificadas.
Este es un Template que busca hacer exactamente eso.
{
"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"]]
}
}
}
En resumen, generamos un hash para cada archivo subido. Si coincide con el hash de un archivo que queremos evitar, el archivo no superará el filtro.
Para terminar
Como puedes ver, hay varios enfoques para filtrar las subidas de archivos. Combina las comprobaciones adecuadas con controles de acceso, un almacenamiento seguro y revisión humana en lugar de depender de una sola señal.
En Transloadit buscamos constantemente que todo sea más seguro, así que, para tu próxima lectura, quizá quieras echar un vistazo a nuestra página de seguridad y ver algunas de las medidas que estamos tomando para lograrlo.
