تعقيم المدخلات في Express باستخدام أداة التحقق السريع

لقد رأيت كيفية التحقق من صحة المدخلات التي تأتي من العالم الخارجي إلى تطبيق 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()يستبدل<و>و&و'و"و/مع كيانات HTML المقابلة لها
  • normalizeEmail()يجعل عنوان البريد الإلكتروني عنوانًا أساسيًا. يقبل عدة خيارات لعناوين البريد الإلكتروني الصغيرة أو العناوين الفرعية (على سبيل المثال[email protected])

طرق التعقيم الأخرى:

  • blacklist()إزالة الأحرف التي تظهر في القائمة السوداء
  • whitelist()إزالة الأحرف التي لا تظهر في القائمة البيضاء
  • unescape()يستبدل الكيانات المشفرة بتنسيق HTML بـ<و>و&و'و"و/
  • ltrim()مثل الاقتطاع () ، ولكن يتم اقتطاع الأحرف فقط في بداية السلسلة
  • rtrim()مثل الاقتطاع () ، ولكن يتم اقتطاع الأحرف فقط في نهاية السلسلة
  • stripLow()إزالة أحرف التحكم ASCII ، والتي عادة ما تكون غير مرئية

فرض التحويل إلى تنسيق:

  • toBoolean()تحويل سلسلة الإدخال إلى قيمة منطقية. كل شيء باستثناء "0" و "خطأ" و "يعود صحيحًا. في الوضع المقيد ، يتم إرجاع "1" و "صحيح" فقط
  • toDate()تحويل سلسلة الإدخال إلى تاريخ ، أو فارغة إذا لم يكن الإدخال تاريخًا
  • 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


المزيد من البرامج التعليمية السريعة: