Express-validatorを使用したExpressでの入力のサニタイズ

外界から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ハンドブック


より明確なチュートリアル: