أمان تطبيقات C#: أهم 10 ثغرات للمبتدئين
أمان البرمجيات هو أحد المهام الأساسية للمطور. حتى التطبيق الصغير بلغة C# يمكن أن يصبح هدفًا للمهاجمين إذا لم يتم مراعاة الثغرات الشائعة. في هذه المقالة، سنستعرض أهم 10 ثغرات في C# (.NET) التي يواجهها المطورون المبتدئون. ستتعرف على كيفية نشوئها، وكيفية استغلالها، والأهم من ذلك، كيفية الحماية منها.
1. حقن SQL (SQL Injection)
هذه واحدة من أقدم وأخطر الثغرات. تنشأ عندما يتم دمج إدخال المستخدم مباشرة في استعلام SQL.
مثال على كود ضعيف:
string userName = Request.QueryString["user"];string query = "SELECT * FROM Users WHERE Name = '" + userName + "'";SqlCommand cmd = new SqlCommand(query, connection);كيف يتم الهجوم: يمكن للمهاجم تمرير قيمة ' OR 1=1 -- في المعامل user، مما يعيد جميع السجلات من الجدول.
الحماية: استخدم الاستعلامات ذات المعاملات.
string query = "SELECT * FROM Users WHERE Name = @userName";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@userName", userName);2. البرمجة النصية عبر المواقع (XSS)
ثغرة XSS تسمح بإدخال كود JavaScript ضار في صفحة يتم عرضها لمستخدمين آخرين.
مثال على كود ضعيف (ASP.NET WebForms):
string comment = Request.Form["comment"];Response.Write("<div>" + comment + "</div>");الحماية: قم دائمًا بترميز المخرجات. استخدم HttpUtility.HtmlEncode() أو بناء جملة Razor (@) الذي يقوم بترميز البيانات تلقائيًا.
Response.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");3. إلغاء التسلسل غير الآمن
عند إلغاء تسلسل البيانات من مصدر غير موثوق (مثل طلب أو ملف)، يمكن للمهاجم تنفيذ كود عشوائي على الخادم.
مثال على كود ضعيف (BinaryFormatter):
BinaryFormatter formatter = new BinaryFormatter();using (var stream = new MemoryStream(data)){ var obj = formatter.Deserialize(stream); // خطير!}الحماية: استخدم أدوات تسلسل حديثة (JSON، XML مع قيود)، وتحقق من الأنواع، ولا تقم أبدًا بإلغاء تسلسل البيانات من عملاء غير موثوقين. تجنب BinaryFormatter و SoapFormatter و LosFormatter.
4. نقاط ضعف المصادقة وإدارة الجلسات
يشمل ذلك كلمات المرور الضعيفة، وعدم وجود حد لعدد محاولات تسجيل الدخول، وملفات تعريف الارتباط غير المحمية للجلسات.
مثال على الثغرة: ملف تعريف ارتباط الجلسة بدون علامتي HttpOnly و Secure.
الحماية:
- استخدم
IdentityأوASP.NET Core Identity. - قم بتكوين ملفات تعريف الارتباط:
HttpOnly،Secure،SameSite=Strict. - قم بتفعيل الحد من عدد محاولات تسجيل الدخول (Account Lockout).
- استخدم HTTPS.
services.ConfigureApplicationCookie(options =>{ options.Cookie.HttpOnly = true; options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.SameSite = SameSiteMode.Strict;});5. تزوير الطلبات عبر المواقع (CSRF)
هجوم يجبر المستخدم المُصرح له على تنفيذ إجراء غير مرغوب فيه على الموقع (مثل تحويل الأموال).
الحماية: استخدم رموز مكافحة التزوير (Anti-Forgery Tokens). في ASP.NET Core، يتم ذلك تلقائيًا عند استخدام وسم <form> مع asp-antiforgery.