Validación de subida
¿Mi formulario de subida acepta lo que debe y rechaza el resto?
El preset upload-validation construye con un solo comando un conjunto entero de archivos de
prueba reales para esta pregunta, y un manifest.json a su lado que dice cómo debe
reaccionar tu sistema a cada archivo. Todo lo de abajo se lee del programa, con los valores por
defecto de esta versión.
¿Qué suele encontrar?
- un límite aplicado en el navegador y no en el servidor
- un SVG o un HTML tomado por una imagen o por texto plano, que es una forma de colar un script por un formulario
- un archivo comprobado por su extensión y nunca abierto, de modo que un PDF llamado .jpg pasa
- un formulario que lee todo el cuerpo en memoria antes de mirar su tamaño
- una subida llamada PHOTO.JPG rechazada donde photo.jpg se acepta, o al revés
- un nombre con espacios, paréntesis o caracteres fuera de ASCII escrito en disco sin cambios
¿Qué hay en el conjunto?
Con sus valores por defecto, tal como lo informa tfg preset show upload-validation:
| Archivos | 71 |
|---|---|
| Targets en su receta | 22 |
| Tamaño total | 120 639 488 B |
| Formatos | html, jpg, pdf, png, svg, txt |
Y lo que el manifiesto de ese conjunto espera de tu sistema:
| Esperado | Significado | Archivos |
|---|---|---|
accept | Tu sistema debe aceptar el archivo. | 56 |
reject | Tu sistema debe rechazar el archivo. | 10 |
unspecified | Depende de las reglas de tu sistema. Tú decides y después compruebas que lo que ocurre es lo que querías. | 5 |
¿Qué puedes cambiar?
| Ajuste | Admite | Por defecto | Qué hace |
|---|---|---|---|
--limit |
un tamaño como 2mb | 10mb |
El límite de tamaño que declara tu formulario de subida. Este conjunto da un paso a cada lado - para un archivo a cada distancia, ejecuta el preset size-boundaries. Este valor por defecto es nuestro marcador, no el valor de tu sistema. Pasa el tuyo. |
--allow |
ids de formato separados por comas | jpg,png,pdf |
Qué tipos debe aceptar tu formulario. Cada uno se convierte en un archivo real de ese tipo, y son el control positivo de todo el conjunto. |
--deny |
extensiones separadas por comas | svg,html,exe,sh |
Qué extensiones debe rechazar tu formulario. Una extensión para la que esta versión no tiene formato recibe igualmente un archivo con ese nombre, con texto plano. |
--far-over |
10x, 2x, off | 2x |
Cuánto se pasa del límite el único archivo grande. Desactívalo donde escribir varias veces el límite no compense el disco. |
--bulk |
0 - 10000 archivos | 50 |
Cuántos archivos contiene la subida masiva. Cero deja ese grupo fuera del conjunto por completo. |
¿Cómo se ejecuta?
Mira cuánto costaría el conjunto, constrúyelo o toma su receta para editarla:
tfg preset show upload-validation
tfg generate --preset upload-validation --limit 10mb --out ./upload-validation
tfg preset eject upload-validation > upload-validation.yaml
O construye sobre él en una receta propia, junto a tus pruebas:
version: 1
extends: preset:upload-validation
with:
limit: 10mb