> For the complete documentation index, see [llms.txt](https://ssd.mrw0l05zyn.cl/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ssd.mrw0l05zyn.cl/recomendaciones/subida-de-archivos-file-upload.md).

# Subida de archivos (file upload)

## Recomendaciones

* Incorporar validaciones de nombre, extensión, tipo (`Content-Type`), contenido (MIME-Type), tamaño y análisis/escaneo (sandbox) para el proceso de carga de archivos en la aplicación.
* Establezca un límite de longitud para el nombre de archivo. Restrinja los caracteres permitidos.
* Asegúrese que el nombre del archivo no contenga caracteres especiales y subcadenas que puedan interpretarse como un directorio o una secuencia transversal (`../`).&#x20;
* Compruebe el nombre del archivo con una lista negra de extensiones prohibidas.
* Verifique la extensión del archivo con una lista blanca de extensiones permitidas. Solo admita extensiones seguras y necesarias para la funcionalidad del comercio/negocio.&#x20;
* Valide el tipo y contenido del archivo, no confíe en el encabezado de tipo de contenido (`Content-Type`), ya que puede ser falsificado.
* Establezca un límite de tamaño de archivo para evitar ataques de denegación de servicio en el espacio de almacenamiento u otras funciones de la aplicación.
* No revele el directorio o ubicación de cargas y no proporcione acceso directo al archivo cargado. Siempre oculte el directorio de carga de los usuarios finales y solo permita descargar los archivos a través de una página de descarga.
* Aleatorizar los nombres de los archivos cargados y almacene sus nombres originales "sanitizados". Cambiar el nombre del archivo agrega otra capa de complejidad para que los atacantes logren acceder directamente a un archivo y evita que el archivo cargado sobrescriba un archivo existente.
* La carga de archivos solo debe ser accesible para usuarios autenticados y autorizados.
* Almacene los archivos en un host diferente, lo que permite una segregación completa de funciones entre la aplicación que atiende al usuario y el host que maneja las cargas de archivos y su almacenamiento.
* El directorio o lugar de almacenamiento de los archivos no debe tener ningún permiso de "ejecución".
* Analice y escanee (sandbox) los archivos en busca de malware o cadenas maliciosas.
* Utilice un Web Application Firewall (WAF) como una capa secundaria de protección.

## Referencias

* [OWASP](https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload)
* OWASP Web Security Testing Guide (WSTG):
  * [Unexpected file types](https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/10-Business_Logic_Testing/08-Test_Upload_of_Unexpected_File_Types)
  * [Malicious files](https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/10-Business_Logic_Testing/09-Test_Upload_of_Malicious_Files)
* [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html)
* [PortSwigger](https://portswigger.net/web-security/file-upload)
