أفضل 10 ثغرات في تطبيقات C# وكيفية تجنبها

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

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

ابدأ الدورة

أمان تطبيقات C#: أهم 10 ثغرات يجب أن يعرفها كل مطور



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



1. حقن SQL (SQL Injection)



هذا واحد من أقدم التهديدات ولكنه لا يزال قائمًا حتى اليوم. تنشأ الثغرة عندما يتم دمج إدخال المستخدم مباشرة في استعلام SQL.



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

string userName = Request.QueryString["name"];string query = "SELECT * FROM Users WHERE Name = '" + userName + "'";SqlCommand cmd = new SqlCommand(query, connection);


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

string userName = Request.QueryString["name"];string query = "SELECT * FROM Users WHERE Name = @name";SqlCommand cmd = new SqlCommand(query, connection);cmd.Parameters.AddWithValue("@name", userName);


توصية: استخدم دائمًا الاستعلامات المعاملية أو Entity Framework، الذي يقوم تلقائيًا بعزل الإدخال.



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



هجمات XSS تسمح للمهاجم بإدخال سكريبت ضار في صفحة الويب. في C#، يحدث هذا غالبًا عند عرض بيانات غير موثقة عبر @Html.Raw().



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

@Html.Raw(Model.Comment)


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

@Html.Encode(Model.Comment)


توصية: استخدم صيغة Razor @Model.Comment (التي تقوم تلقائيًا بترميز HTML) ولا تستخدم أبدًا @Html.Raw() دون تحقق.



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



CSRF يجبر المستخدم المخول على تنفيذ إجراء غير مرغوب فيه على الموقع (مثل تحويل الأموال). في ASP.NET Core، الحماية مدمجة ولكن يجب تفعيلها بشكل صحيح.



الكود المعرض للخطر (عدم وجود رمز مضاد للتزوير):

<form method="post" action="/Account/Delete">    <button type="submit">حذف الحساب</button></form>


الكود الآمن (مع AntiForgeryToken):

<form method="post" action="/Account/Delete">    @Html.AntiForgeryToken()    <button type="submit">حذف الحساب</button></form>


توصية: أضف الخاصية [ValidateAntiForgeryToken] إلى دوال POST الخاصة بك واستخدم @Html.AntiForgeryToken() في النماذج.



4. تخزين كلمات المرور غير الآمن



تخزين كلمات المرور كنص عادي أو باستخدام تجزئات ضعيفة (MD5, SHA1) هو خطأ فادح.



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

string passwordHash = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(password));


الكود الآمن (استخدام bcrypt/Argon2):

using BCrypt.Net;string passwordHash = BCrypt.HashPassword(password, workFactor: 12);


توصية: استخدم مكتبات BCrypt.Net أو Microsoft.AspNetCore.Identity، التي تقوم تلقائيًا بتوليد الملح (salt) وتستخدم خوارزميات حديثة.



5. كشف البيانات الحساسة في الاستثناءات



عرض تتبع الأخطاء الكامل للمستخدم قد يكشف عن هيكل التطبيق، وسلاسل الاتصال، ومسارات الملفات.



الكود المعرض للخطر (في بيئة الإنتاج):

catch (Exception ex){    return Content(ex.ToString());}


الكود الآمن:

catch (Exception ex){    _logger.LogError(ex, "خطأ أثناء معالجة الطلب");    return StatusCode(500, "خطأ داخلي في الخادم");}


توص

المدونات

توصيات الكتب