Tengo una aplicación web (software de foro) en la que estoy trabajando en una función sobre cómo el usuario adjunta archivos a las publicaciones del foro.
La aplicación está escrita en lenguaje ensamblador y la base de datos es SQLite.
El enfoque que utilicé es mantener los archivos adjuntos como blobs en la base de datos y permitir la descarga solo con los encabezados:
Content-type: application/octet-stream
Content-Disposition: attachment
De esta manera, los archivos nunca se almacenarán como archivos en el servidor.
No se planea implementar ninguna validación del tipo de archivo y contenido, porque se consideran superfluas en esta configuración (y quiero dar a los usuarios la máxima libertad, sin comprometer la seguridad, por supuesto).
Está claro que cargar archivos de gran tamaño es una forma de realizar ataques DoS, pero esto no es un tema de la pregunta preestablecida.
Los posibles errores en la aplicación web en sí, que causan desbordamientos de búfer y similares no son un problema también (son posibles, por supuesto, pero quiero preguntar sobre la arquitectura, no sobre la implementación).
La configuración cuestionada es el siguiente esquema:
- sin archivos: desde la solicitud POST - > al campo de blob de SQLite.
- en el campo de blob de SQLite - > a la red y al navegador del usuario.
- Siempre: application / octet-stream y Content-Disposition: attachment
- Sin validación del servidor del tipo de archivo y / o contenido.
Y la pregunta es:
¿Qué vectores de ataque todavía son posibles con el enfoque anterior?
P.S. La pregunta Funcionalidad de carga de archivos de Pentesting es similar, pero discute principalmente que los archivos cargados existen en el FS del servidor que es diferente del sistema que solicito.