您已經了解瞭如何驗證來自外部世界的輸入到您的Express應用程序。
運行面向公眾的服務器時,您很快就會學到一件事:永遠不要信任輸入。
即使您進行了消毒並確保人們不能使用客戶端代碼輸入怪異的東西,您仍然會受到人們使用工具(甚至只是瀏覽器devtools)直接向您的端點進行POST的約束。
或者,機器人會嘗試人類已知的各種利用方式。
您需要做的是清理您的輸入。
這express-validator
包裹您已經用來驗證輸入的內容,也可以方便地用於執行清理操作。
假設您的POST端點接受名稱,電子郵件和年齡參數:
const express = require('express')
const app = express()
app.use(express.json())
app.post(’/form’, (req, res) => {
const name = req.body.name
const email = req.body.email
const age = req.body.age
})
您可以使用以下方法驗證它:
const express = require('express')
const app = express()
app.use(express.json())
app.post(’/form’, [
check(‘name’).isLength({ min: 3 }),
check(‘email’).isEmail(),
check(‘age’).isNumeric()
], (req, res) => {
const name = req.body.name
const email = req.body.email
const age = req.body.age
})
您可以通過在驗證方法之後使用管道傳遞消毒方法來添加消毒:
app.post('/form', [
check('name').isLength({ min: 3 }).trim().escape(),
check('email').isEmail().normalizeEmail(),
check('age').isNumeric().trim().escape()
], (req, res) => {
//...
})
在這裡,我使用了以下方法:
trim()
在字符串的開頭和結尾處修剪字符(默認情況下為空白)escape()
取代<
,>
,&
,'
,"
和/
及其相應的HTML實體normalizeEmail()
規範化電子郵件地址。接受幾種小寫電子郵件地址或子地址的選項(例如[email protected]
)
其他消毒方法:
blacklist()
刪除出現在黑名單中的字符whitelist()
刪除白名單中未出現的字符unescape()
用替換HTML編碼的實體<
,>
,&
,'
,"
和/
ltrim()
類似於trim(),但僅修剪字符串開頭的字符rtrim()
類似於trim(),但僅修剪字符串末尾的字符stripLow()
刪除通常不可見的ASCII控製字符
強制轉換為格式:
toBoolean()
將輸入字符串轉換為布爾值。除“ 0”,“ false”和“”以外的所有內容均返回true。在嚴格模式下,只有'1'和'true'返回truetoDate()
將輸入字符串轉換為日期,如果輸入不是日期,則將其轉換為nulltoFloat()
將輸入字符串轉換為浮點數;如果輸入不是浮點數,則將其轉換為NaNtoInt()
將輸入字符串轉換為整數,如果輸入不是整數,則將其轉換為NaN
與自定義驗證器一樣,您可以創建自定義消毒劑。
在回調函數中,您只需返回已清理的值:
const sanitizeValue = value => {
//sanitize...
}
app.post(’/form’, [
check(‘value’).customSanitizer(value => {
return sanitizeValue(value)
}),
], (req, res) => {
const value = req.body.value
})
免費下載我的Express.js手冊
更多速成教程:
- Express,流行的Node.js框架
- 使用Express檢索GET查詢字符串參數
- 使用express-validator驗證Express中的輸入
- 快遞模板
- 使用Express服務靜態資產
- 使用Express發送JSON響應
- 快速會議
- 使用Express發送回复
- 使用Express發送文件
- 使用Express-Validator清理Express中的輸入
- 在Express中路由
- 具有自簽名證書的Express HTTPS服務器
- Express,請求參數
- 使用Express檢索POST查詢參數
- 使用Express處理重定向
- 快速中間件
- 設置讓我們為Express加密
- 在Express中使用HTTP標頭
- 在Express中處理表格
- 使用Express處理表單中的文件上傳
- 在Express中處理CORS
- 使用Express管理Cookies