Validação de upload
Meu formulário de upload aceita o que deve e recusa o resto?
O preset upload-validation monta com um único comando um conjunto inteiro de arquivos de teste
reais para esta pergunta, e um manifest.json ao lado dizendo como seu sistema deve
reagir a cada arquivo. Tudo abaixo é lido do programa, com os valores padrão desta versão.
O que ele costuma encontrar?
- um limite aplicado no navegador e não no servidor
- um SVG ou HTML tomado por imagem ou por texto simples, que é um jeito de passar um script por um formulário
- um arquivo verificado pela extensão e nunca aberto, de modo que um PDF chamado .jpg passa
- um formulário que lê o corpo inteiro na memória antes de olhar o tamanho
- um upload chamado PHOTO.JPG recusado onde photo.jpg é aceito, ou o contrário
- um nome com espaços, parênteses ou caracteres fora do ASCII gravado em disco sem alteração
O que há no conjunto?
Com os valores padrão, como o tfg preset show upload-validation informa:
| Arquivos | 71 |
|---|---|
| Targets na sua receita | 22 |
| Tamanho total | 120 639 488 B |
| Formatos | html, jpg, pdf, png, svg, txt |
E o que o manifesto desse conjunto espera do seu sistema:
| Esperado | Significado | Arquivos |
|---|---|---|
accept | Seu sistema deve aceitar o arquivo. | 56 |
reject | Seu sistema deve recusar o arquivo. | 10 |
unspecified | Depende das regras do seu sistema. Você decide e depois confere se o que acontece é o que você queria. | 5 |
O que você pode mudar?
| Configuração | Aceita | Padrão | O que faz |
|---|---|---|---|
--limit |
um tamanho como 2mb | 10mb |
O limite de tamanho que seu formulário de upload declara. Este conjunto dá um passo para cada lado - para um arquivo em cada distância, rode o preset size-boundaries. Este valor padrão é o nosso provisório, não o valor do seu sistema. Passe o seu. |
--allow |
ids de formato separados por vírgulas | jpg,png,pdf |
Quais tipos seu formulário deve aceitar. Cada um vira um arquivo real desse tipo, e eles são o controle positivo do conjunto todo. |
--deny |
extensões separadas por vírgulas | svg,html,exe,sh |
Quais extensões seu formulário deve recusar. Uma extensão para a qual esta versão não tem formato ainda recebe um arquivo com esse nome, com texto simples. |
--far-over |
10x, 2x, off | 2x |
O quanto acima do limite vai o único arquivo grande. Desligue onde escrever várias vezes o limite não vale o disco. |
--bulk |
0 - 10000 arquivos | 50 |
Quantos arquivos o upload em massa contém. Zero deixa esse grupo totalmente fora do conjunto. |
Como executar?
Veja quanto o conjunto custaria, monte-o ou pegue a receita dele para editar:
tfg preset show upload-validation
tfg generate --preset upload-validation --limit 10mb --out ./upload-validation
tfg preset eject upload-validation > upload-validation.yaml
Ou construa sobre ele em uma receita sua, ao lado dos seus testes:
version: 1
extends: preset:upload-validation
with:
limit: 10mb