上傳驗證
我的上傳表單是否接受該接受的,並拒絕其餘的?
upload-validation 預設集用一個指令為這個問題建立出整組真實測試檔案,並在旁邊放一個
manifest.json,說明你的系統應如何回應每個檔案。以下所有內容都依此版本的預設值從程式中讀取。
它通常能發現什麼?
- 限制只在瀏覽器中生效,而不在伺服器上
- SVG 或 HTML 檔案被當成圖片或純文字,這是讓指令碼繞過表單的一種辦法
- 只依副檔名檢查而從不開啟檔案,於是名為 .jpg 的 PDF 蒙混過關
- 表單在查看大小之前就把整個請求本文讀進記憶體
- 名為 PHOTO.JPG 的上傳被拒絕,而 photo.jpg 被接受,或者相反
- 含空格、括號或非 ASCII 字元的檔名被原封不動寫入磁碟
組合裡有什麼?
使用預設值時,如 tfg preset show upload-validation 所回報的:
| 檔案數 | 71 |
|---|---|
| 其配方中的 target 數 | 22 |
| 總大小 | 120 639 488 B |
| 格式 | html, jpg, pdf, png, svg, txt |
以及該組合的清單對你的系統有何預期:
| 預期 | 意義 | 檔案數 |
|---|---|---|
accept | 你的系統應該接受這個檔案。 | 56 |
reject | 你的系統應該拒絕這個檔案。 | 10 |
unspecified | 取決於你的系統規則。由你決定,然後檢查實際發生的是否符合你的本意。 | 5 |
你可以變更什麼?
| 設定 | 接受 | 預設值 | 作用 |
|---|---|---|---|
--limit |
形如 2mb 的大小 | 10mb |
你的上傳表單宣告的大小限制。這個組合在限制兩側各取一步,若要涵蓋任意距離的檔案,請執行 size-boundaries 預設集。 這個預設值是我們的預留值,不是你的系統的值。請傳入你自己的值。 |
--allow |
以逗號分隔的格式 id | jpg,png,pdf |
你的表單應該接受哪些類型。每種類型都會變成該類型的真實檔案,它們構成整個組合的陽性對照。 |
--deny |
以逗號分隔的副檔名 | svg,html,exe,sh |
你的表單應該拒絕哪些副檔名。此版本沒有對應格式的副檔名,仍會得到一個同名檔案,內容為純文字。 |
--far-over |
10x, 2x, off | 2x |
那個超大檔案超出限制多少。如果寫入限制數倍大小的檔案不值得占用磁碟,可以關閉。 |
--bulk |
0 - 10000 個檔案 | 50 |
大量上傳包含多少個檔案。設為零則完全不包含這一組。 |
如何執行?
查看組合的開銷、建置它,或取出它的配方來編輯:
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