En primer lugar, existen todos los riesgos de seguridad del servicio web estándar (seguridad de conexión, autenticación, autorización, gestión de sesiones, denegación de servicio, registro, parches, etc.). No voy a hablar más sobre eso por ahora, pero tenga en cuenta que necesita un entorno seguro para algo como esto.
En cuanto a los riesgos específicos de su sistema y los que le gustan ... El riesgo más obvio se produce si los usuarios tienen algún control sobre el nombre de archivo que crea el servicio. Si es así, tiene riesgos tales como el desplazamiento del sistema de archivos, la sobrescritura de los archivos de otros, etc. No parece que planees hacer esto, pero es algo a tener en cuenta.
También existe el riesgo de cargar contenido que podría usarse para atacar al servidor oa los otros usuarios. Estos ataques son más fáciles si el atacante puede controlar el nombre del archivo, pero es posible si todo lo que pueden controlar es la extensión (y aprenden el nombre del archivo), y si hay una API web para descargar el archivo. Para atacar al servidor, cargue un archivo malicioso que el servidor tratará como ejecutable (por ejemplo, una página PHP si el servidor lo admite) y luego navegue hasta él; Es posible que esto no sea posible si está utilizando un servidor Node bien configurado. Para atacar a otros usuarios, cargue un archivo HTML malicioso e intente engañar a otros usuarios para que lo vean en su navegador (lo que resulta en un XSS almacenado); esto puede mitigarse haciendo que los archivos sean recuperables solo de un dominio diferente al que el usuario tiene cookies / autenticación, y / o forzando al navegador a descargar el archivo en lugar de mostrarlo.
Hay denegación de servicio simplemente subiendo demasiados datos. Considere la cantidad de datos que permitirá que los usuarios almacenen y cómo aplica ese límite.
Existe el riesgo de contenido ilegal. El ejemplo estándar aquí es la pornografía infantil; Si los usuarios suben dicho contenido a su servidor y se descubre que está "en posesión" de él, las cosas podrían ir mal para usted. Recomiendo consultar las leyes locales y, idealmente, preguntar a un abogado cuáles son sus derechos y responsabilidades cuando se trata de alojar contenido subido por usuarios.
Hay algunos riesgos para sus analizadores JSON o base64, aunque estos formatos son simples y están ampliamente implementados, por lo que no esperaría problemas allí. Sin embargo, no entiendo por qué quieres usar estos formatos; Los tipos de contenido MIME son la forma estándar de cargar archivos en un servidor web (y, por lo tanto, incorporan el análisis integrado en la mayoría de los servidores web) y consumen menos ancho de banda (base64 expande todo el contenido codificado a 4/3 del tamaño, pero no hay razón un cuerpo de solicitud HTTP debe estar compuesto solo de caracteres imprimibles).
Ya que está almacenando una gran cantidad de datos de usuarios, debe considerar la seguridad de los datos en reposo. Cifrar los archivos individualmente, cifrar todo el volumen o utilizar un almacén externo cifrado de forma transparente son todas las formas posibles de lograrlo, pero también presentan el problema del almacenamiento de claves (como lo hacen casi todos los sistemas criptográficos). No olvide asegurarse de que sus copias de seguridad también estén protegidas; Se han filtrado o robado toneladas de datos confidenciales después de que alguien consiguió las cintas de respaldo o algo similar.
También puede considerar el tema de la privacidad del usuario. Si bien no es exactamente una función de seguridad, la privacidad (para evitar que usuarios no autorizados, que posiblemente lo incluyan a usted, el operador del servicio, vea lo que se cargó) implica una mentalidad similar y, a menudo, se proporciona mediante herramientas de seguridad (como el cifrado). Etiquetó esta pregunta como "cifrado de archivos", pero en realidad no habla de cifrado (base64 es una codificación, pero no hay ninguna clave involucrada; cualquiera que quiera puede decodificarlo, por lo que no es un cifrado). esquema).