المعلمات القوية
معلمات آمنة
المعلمات القوية درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
مشكلة الإسناد الجماعي
ترسل النماذج حقولًا كثيرة دفعةً واحدة. وإذا مرّرتموها جميعًا إلى نموذج من دون فحص، فقد يضيف المهاجم حقولًا لم تقصدوها، مثل تعيين admin: true. وهذه هي ثغرة الإسناد الجماعي.
- لا يُوثق أبدًا بإدخال المستخدم.
- يجب وضع قائمة مسموح بها للحقول.
- يفرض Rails ذلك باستخدام المعلمات القوية.
ما المعلمات القوية؟
تتطلب المعلمات القوية التصريح صراحةً بالمعلمات التي يُسمح للنموذج بقبولها. ويثير Rails خطأً عند محاولة إسناد معلمات جماعيًا لم يُسمح بها.
ويحوّل ذلك ثغرة أمنية صامتة إلى قائمة حقول اختيارية خضعت للمراجعة.
require وpermit
يستخدم هذا النمط طريقتين:
- تضمن
require(:model)وجود المفتاح في المستوى الأعلى. - تضع
permit(:field, ...)قائمة مسموح بها للحقول الداخلية.
def article_params
params.require(:article).permit(:title, :body)
endاستخدام المساعد
عرّفوا طريقة خاصة باسم model_params واستدعوها عند الإنشاء أو التحديث. لا تمرّروا أبدًا params الخام إلى نموذج.
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title, :body)
endلماذا نستخدم طريقة خاصة؟
يعني إبقاء قائمة الحقول المسموح بها في طريقة خاصة واحدة ما يلي:
- تشارك
createوupdateالقواعد نفسها. - يسهل العثور على الحقول المسموح بها ومراجعتها.
- لا تُعرَض الطريقة كإجراء في وحدة التحكم، لأن الطرق الخاصة لا يمكن ربطها بالمسارات.
ما الذي تتم تصفيته؟
يُحذف أي مفتاح مُرسل لا يظهر في قائمة permit قبل وصوله إلى النموذج. فإذا تضمّن نموذج ما admin بطريقة ما، ولم تسمحوا إلا بـ title وbody، فسيتم تجاهل قيمة admin بصمت، وبذلك يظل السجل آمنًا.
السماح بالمصفوفات
بالنسبة إلى قوائم مربعات الاختيار أو القوائم متعددة التحديد التي ترسل مصفوفات، اسمحوا بها عبر تمرير مصفوفة فارغة كقيمة. ويتيح ذلك إرسال قيم متعددة لهذا المفتاح.
params.require(:article).permit(:title, tag_ids: [])السماح بالتجزئات المتداخلة
بالنسبة إلى السمات المتداخلة، أي النموذج الذي يعدّل نموذجًا أبًا وأبناءه في الوقت نفسه، اسمحوا بالمفاتيح المتداخلة عبر تجزئة تصف الحقول الداخلية.
params.require(:order).permit(
:customer_name,
items_attributes: [:product_id, :quantity]
)التعامل مع المعلمات المفقودة
إذا كان المفتاح المطلوب مفقودًا، فإن require يثير ParameterMissing، ويعرضه Rails باعتباره استجابة 400 Bad Request. ويحمي ذلك الإجراءات تلقائيًا من الطلبات غير الصحيحة.
# Missing :article key raises:
# ActionController::ParameterMissingpermit! خطير
يمكنكم استدعاء params.permit! للسماح بكل شيء، لكن ذلك يعيد فتح ثغرة الإسناد الجماعي. تجنّبوا ذلك إلا في السياقات الداخلية الموثوقة. واحرصوا دائمًا على استخدام قائمة سماح صريحة.
أفضل الممارسات
احرصوا على أمان params:
- حدّدوا أقل مجموعة ممكنة من الحقول ضمن قائمة السماح.
- لا تسمحوا أبدًا بتمرير خيارات حساسة مثل
roleأوadminمن نموذج عام. - اضبطوا هذه الحقول صراحةً في المتحكّم استنادًا إلى منطق الخادم.
اختبار سريع
اختبروا فهمكم للمعاملات القوية.
مراجعة: المعاملات القوية
تعلّمتم كيفية تصفية الإدخال بأمان:
- الإسناد الجماعي خطر أمني حقيقي.
- تفرض
requireالمفتاح الأعلى، بينما تحدّدpermitالحقول المسموح بها. - احتفظوا بقائمة السماح في دالة خاصة مشتركة.
- اسمحوا بالمصفوفات وHash المتداخلة عند الحاجة.
- تجنّبوا
permit!ولا تسمحوا أبدًا بتمرير الخيارات الحساسة.
بعد ذلك، سنعيد الاستجابات باستخدام العروض والتصيير.
الأسئلة الشائعة
هل درس «المعلمات القوية» مجاني؟
نعم — نص درس «المعلمات القوية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «المعلمات القوية»؟
معلمات آمنة تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «المعلمات القوية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المسارات والموارد
- وحدات التحكم والإجراءات
- المعلمات القوية
- العروض والتصيير