Вы видели, как проверять ввод, поступающий из внешнего мира в ваше приложение Express.
Когда вы запускаете общедоступный сервер, вы быстро понимаете одну вещь: никогда не доверяйте вводимым данным.
Даже если вы продезинфицируете и убедитесь, что люди не могут вводить странные вещи, используя код на стороне клиента, вы все равно будете подвержены людям, использующим инструменты (даже только инструменты разработчика браузера) для 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()
заменяет<
,>
,&
,'
,"
и/
с соответствующими объектами HTMLnormalizeEmail()
канонизирует адрес электронной почты. Принимает несколько вариантов строчных адресов электронной почты или дополнительных адресов (например,[email protected]
)
Другие методы санитарной обработки:
blacklist()
удалить символы, которые появляются в черном спискеwhitelist()
удалить символы, которых нет в белом спискеunescape()
заменяет объекты в кодировке HTML на<
,>
,&
,'
,"
и/
ltrim()
как trim (), но обрезает только символы в начале строкиrtrim()
как trim (), но обрезает только символы в конце строкиstripLow()
удалить управляющие символы ASCII, которые обычно невидимы
Принудительное преобразование в формат:
toBoolean()
преобразовать входную строку в логическое значение. Все, кроме «0», «ложь» и «, возвращает истину. В строгом режиме только «1» и «истина» возвращают истину.toDate()
преобразовать строку ввода в дату или null, если ввод не является датойtoFloat()
преобразовать входную строку в число с плавающей запятой или NaN, если ввод не является числом с плавающей запятойtoInt()
преобразовать входную строку в целое число или 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
- Получить параметры строки запроса GET с помощью Express
- Проверка ввода в Express с помощью экспресс-валидатора
- Экспресс-шаблоны
- Обслуживание статических активов с помощью Express
- Отправить ответ JSON с помощью Express
- Экспресс-сессии
- Отправьте ответ с помощью Express
- Отправляйте файлы с помощью Express
- Очистка ввода в Express с помощью экспресс-валидатора
- Маршрутизация в экспрессе
- Сервер Express HTTPS с самозаверяющим сертификатом
- Экспресс, параметры запроса
- Получить параметры запроса POST с помощью Express
- Обработка переадресации с помощью Express
- Экспресс промежуточное ПО
- Настроить Let's Encrypt для Express
- Работа с заголовками HTTP в Express
- Обработка форм в Express
- Обработка загрузки файлов в формы с помощью Express
- Обработка CORS в Express
- Управляйте файлами cookie с помощью Express