アップロードの検証
アップロードフォームは、受け入れるべきものを受け入れ、それ以外を拒否できるでしょうか。
upload-validationプリセットは、この疑問に対する本物のテストファイル一式を1つのコマンドで作り、その隣に、システムが各ファイルにどう反応すべきかを示すmanifest.jsonを置きます。以下はすべて、このバージョンの既定値でプログラムから読み取ったものです。
普通は何を見つけますか。
- サーバーではなくブラウザーだけで適用されている制限
- 画像やプレーンテキストと見なされるSVGやHTMLファイル。スクリプトにフォームの検査をすり抜けさせる手口です
- 拡張子だけで判定され、開かれないファイル。.jpgという名前のPDFが通ってしまいます
- サイズを確認する前に、本文全体をメモリに読み込むフォーム
- photo.jpgは受け付けるのにPHOTO.JPGは拒否される、またはその逆になるアップロード
- スペースやかっこ、ASCII以外の文字を含む名前が、そのままディスクに書き込まれる問題
セットには何が入っていますか。
既定値で、tfg preset show upload-validationが報告するとおりです。
| ファイル数 | 71 |
|---|---|
| レシピ内のターゲット数 | 22 |
| 合計サイズ | 120 639 488 B |
| 形式 | html, jpg, pdf, png, svg, txt |
そして、そのセットのマニフェストがシステムに期待していること:
| 期待 | 意味 | ファイル数 |
|---|---|---|
accept | システムはこのファイルを受け入れるべきです。 | 56 |
reject | システムはこのファイルを拒否するべきです。 | 10 |
unspecified | システムのルール次第です。あなたが決め、実際に起きることが意図どおりかを確認してください。 | 5 |
何を変更できますか。
| 設定 | 値 | 既定値 | 動作 |
|---|---|---|---|
--limit |
2mbのようなサイズ | 10mb |
アップロードフォームが宣言するサイズ制限です。このセットは制限の両側に1段ずつ取ります。あらゆる距離のファイルが必要な場合は、size-boundariesプリセットを実行してください。 この既定値はこちらの仮の値で、あなたのシステムの値ではありません。ご自身の値を指定してください。 |
--allow |
カンマ区切りの形式ID | jpg,png,pdf |
フォームが受け入れるべき種類です。それぞれがその種類の本物のファイルになり、セット全体の陽性対照になります。 |
--deny |
カンマ区切りの拡張子 | svg,html,exe,sh |
フォームが拒否すべき拡張子です。このビルドに対応する形式がない拡張子でも、その名前でプレーンテキストを含むファイルが作られます。 |
--far-over |
10x, 2x, off | 2x |
1つだけの大きなファイルが制限をどれだけ超えるかです。制限の何倍も書き込むのがディスクの無駄になる場合はオフにします。 |
--bulk |
0 - 10000 ファイル | 50 |
一括アップロードに含めるファイル数です。0にすると、そのグループはセットから完全に外れます。 |
どう実行しますか。
セットのコストを確認し、作成し、または編集用にそのレシピを取り出します。
tfg preset show upload-validation
tfg generate --preset upload-validation --limit 10mb --out ./upload-validation
tfg preset eject upload-validation > upload-validation.yaml
または、テストの隣に置いた自分のレシピで、これを土台にします。
version: 1
extends: preset:upload-validation
with:
limit: 10mb