🚩 10 أخطاء برمجية قاتلة يبتسم المخترقون عند رؤيتها!
تصميم مرجعي سريع للمبرمجين، يعرض كل خطأ في بطاقة مستقلة تحتوي على وصف الخطأ، لقطة شاشة للكود المصاب (باللون الأحمر)، ولقطة شاشة للكود الآمن (باللون الأخضر)، مع تعليق برمي مبسط باللغة العربية.
أهلاً بك أيها المبرمج المحترف! تذكر دائماً أن الأمن لا يتم بالصدفة؛ بل يُبنى مع كل سطر كود تكتبه. في هذا الدليل الشامل، سنقوم بتفكيك أبرز 10 كوارث برمجية نقع فيها غالباً، وكيف يمكن للمخترق استغلالها، وكيف تقوم أنت بإغلاق الباب في وجهه.
1. الثقة العمياء في مدخلات المستخدم
الخطأ (The Flaw): تمرير بيانات المستخدم (مثل `GET['id']`) مباشرة لقاعدة البيانات دون فحص.
الكارثة: ثغرة SQL Injection، حذف بيانات، أو سرقة حسابات.
// ❌ كود مصاب: SQL Injection قاتلة
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = $id";
// ✅ الكود الآمن: استخدامPrepared Statements
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$_GET['id']]);
2. تخزين كلمات المرور كنص مجرد (Plain Text)
الخطأ: حفظ كلمة المرور "كما هي" في قاعدة البيانات.
الكارثة: إذا تم اختراق قاعدة البيانات، تنكشف كلمات مرور جميع المستخدمين.
// ❌ خطأ فادح
$password_db = $_POST['password'];
// ✅ الكود الآمن: استخدام bcrypt hashing
$hash = password_hash('password', PASSWORD_DEFAULT);
3. إظهار تفاصيل الأخطاء للمستخدمين
الخطأ: عرض رسالة خطأ تقنية تظهر مسارات الملفات وهيكلة قاعدة البيانات.
الكارثة: تقديم معلومات حساسة للمخترق تسهل عليه الهجوم.
// ❌ كود مصاب (عرض الأخطاء)
ini_set('display_errors', 1);
// ✅ الكود الآمن: إخفاء الأخطاء وتسجيلها داخلياً
ini_set('display_errors', 0);
error_log("خطأ في قاعدة البيانات: [تفاصيل]");
4. استخدام مكتبات برمجية قديمة
الخطأ: إهمال تحديث الـ Dependencies المستخدمة في المشروع.
الكارثة: استغلال ثغرات معروفة في هذه المكتبات لاختراق النظام.
# ❌ كود مصاب: نسخة قديمة جداً
package.json: "old-library": "1.0.0"
# ✅ الكود الآمن: التحديث المستمر
npm update
package.json: "old-library": "1.8.3"
5. عدم تحديد مهلة للجلسة (Session Timeout)
الخطأ: بقاء المستخدم مسجلاً للأبد في النظام، مما يسهل سرقة الجلسة.
الكارثة: إذا ترك المستخدم جهازه مفتوحاً، يمكن لأي شخص الدخول لحسابه.
// ❌ كود مصاب (الجلسة لا تنتهي)
Session.lifetime = infinite;
// ✅ الكود الآمن: تحديد وقت انتهاء
Session.lifetime = 30min;
Session.regenerate_id();
6. إهمال الصلاحيات (IDOR Vulnerability)
الخطأ: السماح لمستخدم برؤية بيانات مستخدم آخر عبر تغيير رقم الـ ID في الرابط.
الكارثة: تسريب بيانات حساسة لجميع المستخدمين.
// ❌ كود مصاب: لا يتحقق من المالك
/user/10 -> عرض ملف مستخدم #10
// ✅ الكود الآمن: تحقق دائماً من المالك
if (user.id == current_user.id) { ... }
7. مفاتيح الأمان المكشوفة في الكود (Hardcoded Secrets)
الخطأ: وضع مفاتيح الـ API أو كلمات مرور قاعدة البيانات داخل الكود البرمجي مباشرة.
الكارثة: إذا تم رفع الكود لـ GitHub، تصبح مفاتيحك ملكاً للجميع.
// ❌ خطأ فادح: المفتاح مكشوف
const API_KEY = "SECRET-KEY";
// ✅ الكود الآمن: استدعاء المفتاح من بيئة النظام
const API_KEY = process.env.MY_API_KEY;
8. غياب الحماية ضد هجمات القوة الغاشمة (Brute Force)
الخطأ: عدم تحديد عدد محاولات تسجيل الدخول الخاطئة.
الكارثة: المخترق يستخدم برامج لتجربة آلاف الكلمات مرور حتى يجد الكلمة الصحيحة.
// ❌ كود مصاب: عدد غير محدود من المحاولات
Unlimited Login Requests
// ✅ الكود الآمن: تحديد معدل المحاولات
Lockout after 5 failed attempts
9. استخدام بروتوكول HTTP بدلاً من HTTPS
الخطأ: إرسال البيانات بين المتصفح والسيرفر غير مشفرة.
الكارثة: المخترق يمكنه التجسس على بيانات المستخدم (مثل كلمات المرور) أثناء إرسالها.
# ❌ كود مصاب (غير آمن)
http://site.com (كلمات المرور مكشوفة)
# ✅ الكود الآمن: تشفير الاتصال بالكامل
https://site.com (اتصال مشفر وآمن)
10. عدم التحقق من نوع الملفات المرفوعة
الخطأ: السماح برفع أي نوع ملف (مثل ملفات .php) للمشروع.
الكارثة: المخترق يرفع ملف خبيث ويقوم بتنفيذه، مما يعطيه سيطرة كاملة على السيرفر.
// ❌ كود مصاب: رفع أي ملف
Arbitrary file upload
احرص على كودك من أجل أمنك وأمن مستخدميك! 🛡️
أنت الآن تمتلك خارطة طريق لإغلاق أبرز 10 ثغرات يقع فيها المبرمجون. تجنب هذه الأخطاء سيجعلك تتفوق على **90%** من زملائك في جانب الأمان.
🔗 لا تدع الثغرة القادمة تكون في كودك.. انتظرنا في المقال القادم!
Kunh.tech
ماذا بعد؟ 🤔
لقد استعرضنا اليوم 10 ثغرات برمجية قد تبدو بسيطة، لكن واحدة منها فقط مسؤولة عن اختراق كبرى الشركات العالمية وتسريب بيانات ملايين المستخدمين سنوياً.
هل أنت مستعد لتفكيك "ملك الثغرات"؟
في المقال القادم، سنضع ثغرة حقن الاستعلامات (SQL Injection) تحت المجهر. لن نكتفي بالشرح النظري، بل سنقوم ببناء سيناريو اختراق كامل (في بيئة آمنة) لنتعلم كيف يفك المهاجم شفرة قاعدة بياناتك، وكيف تمنعه أنت للأبد.

ليست هناك تعليقات:
إرسال تعليق
شاركنا رايك