أمان تطبيقات C#: أهم 10 ثغرات والحماية في .NET

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

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

ابدأ الدورة

أمان تطبيقات C#: أهم 10 ثغرات وطرق الحماية في .NET



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



1. حقن SQL (SQL Injection)

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

الكود المعرض للخطر:

string query = "SELECT * FROM Users WHERE Username = '" + username + "'";SqlCommand cmd = new SqlCommand(query, connection);

الكود الآمن (استخدام الاستعلامات المعلمة):

string query = "SELECT * FROM Users WHERE Username = @username";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@username", username);


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

هجوم يقوم فيه المهاجم بحقن سكريبت ضار في صفحة الويب. في ASP.NET Core، من المهم ترميز المخرجات.

الكود المعرض للخطر (Razor):

<div>@Model.UserInput</div>

الكود الآمن:

<div>@Html.Encode(Model.UserInput)</div>// أو في ASP.NET Core استخدم @Model.UserInput إذا كنت لا تستخدم HtmlString

في ASP.NET Core Razor، يتم ترميز المخرجات افتراضيًا، ولكن عند استخدام @Html.Raw() أو إرجاع ContentResult ببيانات غير موثوقة، يعود الخطر.



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

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

الحماية في ASP.NET Core:

// في ConfigureServicesservices.AddAntiforgery(options => options.HeaderName = "X-CSRF-TOKEN");

// في المتحكم[AutoValidateAntiforgeryToken]public class AccountController : Controller{ [HttpPost] [ValidateAntiForgeryToken] public IActionResult ChangePassword(ChangePasswordModel model) { // كود }}


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

ثغرة خطيرة، خاصة عند استخدام BinaryFormatter أو SoapFormatter أو Newtonsoft.Json مع TypeNameHandling.All.

الكود المعرض للخطر:

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All };var obj = JsonConvert.DeserializeObject(json, settings);

الكود الآمن:

// استخدم System.Text.Json (آمن افتراضيًا)var obj = JsonSerializer.Deserialize<MyType>(json);// أو قيد TypeNameHandling في Newtonsoftvar settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None };


5. عيوب المصادقة وإدارة الجلسات

تتضمن كلمات مرور ضعيفة، عدم وجود قفل للحساب، وملفات تعريف ارتباط غير محمية.

التوصيات:

  • استخدم ASP.NET Core Identity مع سياسات كلمات المرور.
  • قم بإعداد حماية ملفات تعريف الارتباط: HttpOnly، Secure، SameSite.
  • قم بتفعيل القفل بعد N من المحاولات الفاشلة.
services.ConfigureApplicationCookie(options =>{    options.Cookie.HttpOnly = true;    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;    options.Cookie.SameSite = SameSiteMode.Strict;    options.ExpireTimeSpan = TimeSpan.FromMinutes(30);    options.SlidingExpiration = true;});


6. كشف البيانات الحساسة

تخزين كلمات المرور بنص واضح، نقل البيانات عبر HTTP، وتسجيل الأسرار.

الكود الآمن:

// تجزئة كلمات المرورvar passwordHasher = new PasswordHasher<User>();string hash = passwordHa                

المدونات

توصيات الكتب