تكرار السؤال: …
الإجابة المختصرة
باستخدام الاستعلامات المجهزة المعتمدة على المعلمات النائبة (@param) وتمرير كائنات مجهولة لـ Dapper، وحظر دمج النصوص المباشر نهائياً.
الشرح
في الـ Micro-ORMs مثل Dapper، يكتب المطور استعلامات SQL بيده. الخطر الأكبر هو دمج متغيرات المستخدم بنصوص الـ string interpolation. الطريقة الآمنة الحتمية هي استخدام المعلمات المصرحة (@email)، حيث يقوم Dapper بتوليد كائنات DbParameter وإرسال القيم معزولة لقاعدة البيانات لحمايتها من أي استغلال خبيث.
مثال بالكود
// آمن تماماً بواسطة Dapper Parameterization
var user = await connection.QueryFirstOrDefaultAsync<User>(
"SELECT * FROM Users WHERE Email = @Email AND Status = @Status",
new { Email = inputEmail, Status = "Active" }
);أخطاء شائعة
- كتابة $"SELECT * FROM Users WHERE Email = '{inputEmail}'" مع Dapper مما يفتح ثغرة حقن SQL فادحة.