外界からExpressアプリへの入力を検証する方法を見てきました。
公開サーバーを実行するときにすぐにわかることが1つあります。それは、入力を絶対に信用しないことです。
サニタイズして、クライアント側のコードを使用して人々が奇妙なものを入力できないようにしたとしても、ツール(ブラウザーの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」のみがtrueを返しますtoDate()
入力文字列を日付に変換するか、入力が日付でない場合はnullに変換しますtoFloat()
入力文字列をfloatに変換するか、入力がfloatでない場合は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ハンドブック
より明確なチュートリアル:
- 人気のあるNode.jsフレームワークであるExpress
- Expressを使用してGETクエリ文字列パラメータを取得します
- express-validatorを使用したExpressでの入力の検証
- Expressテンプレート
- Expressで静的資産を提供する
- Expressを使用してJSON応答を送信する
- エクスプレスセッション
- Expressを使用して応答を送信する
- Expressを使用してファイルを送信する
- Express-validatorを使用したExpressでの入力のサニタイズ
- Expressでのルーティング
- 自己署名証明書を備えたExpressHTTPSサーバー
- Express、リクエストパラメータ
- Expressを使用してPOSTクエリパラメータを取得する
- Expressでリダイレクトを処理する
- Expressミドルウェア
- セットアップLet'sEncrypt for Express
- ExpressでHTTPヘッダーを操作する
- Expressでのフォームの処理
- Expressを使用したフォームでのファイルアップロードの処理
- ExpressでのCORSの処理
- ExpressでCookieを管理する