أمان تطبيقات C#: أهم 10 ثغرات عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أمان تطبيقات C#: أهم 10 ثغرات عملية



الأمان هو أحد أهم مكونات تطوير التطبيقات الحديثة بلغة C# و .NET. حتى خطأ صغير تم التغاضي عنه يمكن أن يؤدي إلى تسرب البيانات أو اختراق النظام بالكامل. في هذه المقالة، سنستعرض أكثر 10 ثغرات شيوعًا التي يواجهها مطورو C#، وسنوضح كيفية تجنبها عمليًا.



1. حقن SQL (SQL Injection)

أقدم وأخطر ثغرة. تحدث عندما يتم إدخال بيانات المستخدم مباشرة في استعلام SQL.



الكود الضعيف:

string login = txtLogin.Text;string query = "SELECT * FROM Users WHERE Login = '" + login + "'";SqlCommand cmd = new SqlCommand(query, connection);


الكود الآمن (استعلامات مع بارامترات):

string login = txtLogin.Text;string query = "SELECT * FROM Users WHERE Login = @login";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@login", login);


حماية إضافية: استخدم ORM (Entity Framework) — فهو يقوم تلقائيًا ببارمترة الاستعلامات.



2. البرمجة النصية عبر المواقع (XSS)

يقوم المهاجم بحقن كود JavaScript ضار في الصفحة من خلال إدخال المستخدم.



الكود الضعيف:

string comment = Request.Form["comment"];Response.Write("<div>" + comment + "</div>");


الكود الآمن (ترميز المخرجات):

string comment = Request.Form["comment"];Response.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");


في ASP.NET Core استخدم @Html.Encode() أو صياغة Razor مع الترميز التلقائي.



3. تزوير الطلبات عبر المواقع (CSRF)

هجوم يجبر المستخدم على تنفيذ إجراء غير مرغوب فيه على موقع تم تسجيل دخوله إليه.



الكود الضعيف (بدون حماية):

[HttpPost]public IActionResult DeleteAccount(int userId){    // حذف الحساب دون التحقق من التوكن    return Ok();}


الحماية باستخدام Anti-forgery tokens في ASP.NET Core:

[HttpPost][ValidateAntiForgeryToken]public IActionResult DeleteAccount(int userId){    // حذف آمن    return Ok();}


على العميل، يتم إرسال التوكن عبر حقل مخفي في النموذج أو رأس الطلب.



4. إلغاء التسلسل غير الآمن

عند إلغاء تسلسل البيانات من مصدر غير موثوق، يمكن للمهاجم تنفيذ كود عشوائي.



الكود الضعيف (BinaryFormatter):

BinaryFormatter formatter = new BinaryFormatter();using (FileStream fs = new FileStream("data.bin", FileMode.Open)){    var obj = formatter.Deserialize(fs); // خطير!}


البدائل الآمنة:

  • استخدم System.Text.Json أو Newtonsoft.Json مع تقييد الأنواع.
  • فعّل TypeNameHandling.None.
  • تجنب BinaryFormatter و SoapFormatter و LosFormatter.


5. نقاط ضعف المصادقة وإدارة الجلسات

مصادقة ضعيفة، تخزين كلمات المرور بنص عادي، رموز جلسات قابلة للتوقع.



الأخطاء:

  • تخزين كلمة المرور بنص عادي: User.Password = txtPassword.Text;
  • تنفيذ التجزئة (hashing) بنفسك بدون ملح (salt).
  • استخدام Guid.NewGuid() لتوليد الرموز - يمكن توقعها بسهولة.


النهج الصحيح:

  • استخدم ASP.NET Core Identity - حل مدمج.
  • قم بتجزئة كلمات المرور باستخدام BCrypt.Net أو

المدونات

توصيات الكتب