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

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

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

ابدأ الدورة

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

\n\n

تطوير تطبيقات آمنة بلغة C# ليس مجرد موضة، بل ضرورة. كل يوم يتم اكتشاف آلاف الثغرات في العالم، وقد يكون تطبيقك الهدف التالي. في هذه المقالة، سنستعرض 10 من أكثر الثغرات شيوعًا في تطبيقات C# (.NET) التي يواجهها المطورون المبتدئون. ستتعلم كيفية اكتشافها، والأهم من ذلك، كيفية حماية كودك.

\n\n

1. حقن SQL (SQL Injection)

\n\n

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

\n\n

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

\n
string userName = Request["username"];\nstring query = "SELECT * FROM Users WHERE Name = '" + userName + "'";\nSqlCommand cmd = new SqlCommand(query, connection);
\n\n

الحماية: استخدم الاستعلامات المُعلمة أو Entity Framework.

\n
string userName = Request["username"];\nstring query = "SELECT * FROM Users WHERE Name = @name";\nSqlCommand cmd = new SqlCommand(query, connection);\ncmd.Parameters.AddWithValue("@name", userName);
\n\n

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

\n\n

تسمح هجمات XSS للمهاجم بحقن سكريبت ضار في صفحة يتم عرضها لمستخدمين آخرين.

\n\n

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

\n
string comment = Request["comment"];\nResponse.Write("<div>" + comment + "</div>");
\n\n

الحماية: قم دائمًا بترميز المخرجات. استخدم HttpUtility.HtmlEncode():

\n
string comment = Request["comment"];\nResponse.Write("<div>" + HttpUtility.HtmlEncode(comment) + "</div>");
\n\n

3. غياب المصادقة والتفويض

\n\n

ينسى العديد من المبتدئين التحقق من صلاحيات الوصول إلى الموارد. على سبيل المثال، يمكن للمستخدم الوصول إلى ملف تعريف مستخدم آخر بمجرد تغيير المعرف في عنوان URL.

\n\n

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

\n
public IActionResult Profile(int userId)\n{\n    var user = _context.Users.Find(userId);\n    return View(user);\n}
\n\n

الحماية: تحقق دائمًا من أن المستخدم الحالي لديه الحق في الوصول إلى المورد المطلوب:

\n
public IActionResult Profile(int userId)\n{\n    var currentUserId = User.FindFirst(ClaimTypes.NameIdentifier).Value;\n    if (userId != currentUserId) return Forbid();\n    var user = _context.Users.Find(userId);\n    return View(user);\n}
\n\n

4. تسرب البيانات الحساسة عبر الاستثناءات

\n\n

غالبًا ما يعرض المطورون معلومات كاملة عن الأخطاء، بما في ذلك تتبع الاستدعاءات وسلاسل الاتصال.

\n\n

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

\n
try\n{\n    // code\n}\ncatch (Exception ex)\n{\n    Response.Write(ex.ToString()); // خطير!\n}
\n\n

الحماية: في بيئة الإنتاج، استخدم رسائل خطأ عامة، وسجل التفاصيل في مكان آمن:

\n
try\n{\n    // code\n}\ncatch (Exception ex)\n{\n    _logger.LogError(ex, "خطأ أثناء معالجة الطلب");\n    return StatusCode(500, "حدث خطأ داخلي في الخادم");\n}
\n\n

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

\n\n

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

\n\n

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

\n
string passwordHash = MD5.Hash(password); // لا يجوز!
\n\n

الحماية: استخدم خوارزميات تجزئة حديثة مع ملح، مثل BCrypt أو ASP.NET Core Identity:

\n
var passwordHasher = new PasswordHasher<IdentityUser>();\nstring passwordHash = passwordHasher.HashPassword(user, password);
\n\n

6. الحماية غير الكافية من CSRF (تزوير الطلب عبر المواقع)

\n\n

هجوم يجبر فيه المهاجم متصفح الضحية على تنفيذ إجراء غير مرغوب فيه على موقع آخر، حيث

المدونات

توصيات الكتب