تكرار السؤال: …
الإجابة المختصرة
تحدث عندما يقبل المتحكم نموذج الكيان الداخلي مباشرة في معلمات الـ Action مما يتيح للعميل حقن حقول حساسة؛ وتقضي عليها باستخدام DTOs مخصصة حصراً لكل طلب.
الشرح
إذا كانت دالة الـ Action تقبل public IActionResult Update(User user)، يمكن للمهاجم إرسال حقل IsAdmin: true في الـ JSON وسيقوم الـ Model Binder بإسناده للكيان وحفظه في قاعدة البيانات. القاعدة الهندسية الصارمة هي عدم استخدام كائنات EF Core Entities في معلمات الـ API مطلقاً، واستخدام نماذج نقل بيانات (Request DTOs) مخصصة لا تحتوي إلا على الحقول المسموح للمستخدم بتعديلها صراحة.
مثال بالكود
// DTO آمن ومخصص لما يحق للمستخدم تعديله فقط
public record UpdateProfileRequest(string DisplayName, string Bio);
[HttpPut("profile")]
public async Task<IActionResult> Update(UpdateProfileRequest request) { ... }أخطاء شائعة
- الاعتماد على سمات [Bind] القديمة في المتحكمات بدلاً من تطبيق فصل الـ DTOs الصريح.