
表單的防灌水與資安該注意什麼?
表單是網站對外開放的入口
任何人都能填、都能送出——這是表單的用途,也是它的風險所在。
常見的三類問題:機器人大量灌送垃圾內容、透過檔案上傳植入惡意程式、以及利用表單漏洞攻擊網站或散發垃圾郵件。
一、垃圾訊息
自動化程式會掃描網路上的表單並大量送出內容,通常帶有廣告連結。造成的問題:
- 真正的詢問被淹沒在垃圾訊息中
- 大量通知信影響寄件信譽,連正常信件都可能被擋
- 資料庫膨脹
- 浪費人力逐筆判讀
防制方式與取捨
| 做法 | 效果 | 對使用者的影響 |
|---|---|---|
| 隱藏欄位陷阱 | 可擋掉簡單的機器人 | 無 |
| 送出時間判斷 | 過快送出視為異常 | 無 |
| 背景式機器人判斷 | 效果好 | 低 |
| 圖形驗證碼 | 效果好 | 高 |
| 限制送出頻率 | 擋大量灌送 | 低 |
建議優先使用前三種。 隱藏欄位陷阱的原理是放一個真人看不到、但機器人會填的欄位——有填就是機器人。成本極低,效果不錯。
圖形驗證碼的問題
它會擋掉真人,尤其是只能看圖辨識的驗證碼,視障使用者無法通過。年長使用者也常常反覆輸入失敗而放棄。
如果一定要用,應提供語音或其他替代方式。無障礙的相關說明見無障礙網站的實作檢查清單。
務實的順序是:先用不影響使用者的方式,垃圾訊息仍然太多再加強。 不要一開始就用最嚴格的手段,把真客戶一起擋掉。
二、檔案上傳
如果表單允許上傳附件,風險會明顯提高。必要的防護:
- 限制可上傳的副檔名——只開放實際需要的,例如 PDF、JPG、PNG
- 不要只看副檔名——應同時檢查檔案的實際類型
- 限制檔案大小
- 上傳的檔案不要存在可直接執行的位置
- 重新命名檔案——避免使用者提供的檔名造成問題
- 若接受 SVG,要特別注意——它是文字檔,可以夾帶腳本
如果沒有真正的必要,不開放檔案上傳是最安全的做法。改請對方在需要時以 Email 提供附件。
三、程式層面的防護
這些由開發端處理,但值得知道有這些事:
- 輸入內容的檢查與淨化——避免惡意內容被存入或執行
- 防止跨站請求偽造——確認送出的請求來自自己的網站
- 不要把使用者輸入的內容直接顯示在後台而未處理——否則管理者開啟紀錄時可能觸發惡意腳本
- 不要讓表單成為轉寄工具——若收件位址可被外部指定,會被利用來發送垃圾郵件
最後一項曾造成不少網站的網域被列入黑名單。
四、避免洩漏資訊
- 錯誤訊息不要洩漏系統細節——例如資料庫錯誤的原文
- 不要在網頁原始碼中放收件信箱——會被自動化程式蒐集,成為垃圾郵件目標
- 成功頁面不要顯示完整的送出內容
已經被大量灌送怎麼辦
- 先加上不影響使用者的防護——隱藏欄位、送出頻率限制
- 清理既有的垃圾紀錄——但先確認其中沒有夾雜真的詢問
- 檢查寄件信譽——大量寄送後可能已影響,需觀察正常信件是否正常送達
- 若仍持續,再考慮加入背景式驗證
- 檢查是否有其他管道被利用——例如留言板、會員註冊
定期檢查
建議每季確認:
- 表單是否仍正常運作(自行送出一筆測試)
- 垃圾訊息的比例是否上升
- 系統與外掛是否為最新版本
- 上傳目錄中是否有異常檔案
表單是少數會默默壞掉、也會默默被濫用的功能,定期檢查的成本很低但價值很高。