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

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

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

ابدأ الدورة

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

\n

لا تزال PHP واحدة من أكثر اللغات شيوعًا لتطوير الويب، لكن مرونتها غالبًا ما تؤدي إلى ثغرات إذا لم يتم اتباع قواعد الأمان الأساسية. وفقًا لـ OWASP، تحدث معظم الاختراقات بسبب 10 أخطاء نموذجية يرتكبها المطورون المبتدئون. في هذه المقالة، سنشرح كل ثغرة بأمثلة كود حقيقية ونوضح كيفية حماية تطبيقك.

\n\n

1. حقن SQL (SQL Injection)

\n

الهجوم الأكثر شيوعًا. يقوم المهاجم بإدخال كود SQL ضار عبر إدخال المستخدم.

\n

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

\n
<?php\n$id = $_GET['id'];\n$query = "SELECT * FROM users WHERE id = $id";\n$result = mysqli_query($conn, $query);\n?>
\n

الحماية: استخدم الاستعلامات المحضرة (prepared statements):

\n
<?php\n$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");\n$stmt->bind_param("i", $_GET['id']);\n$stmt->execute();\n$result = $stmt->get_result();\n?>
\n\n

2. XSS (Cross-Site Scripting)

\n

إدخال كود JavaScript في الصفحة عبر بيانات غير موثقة.

\n

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

\n
<?php\necho "مرحبًا، " . $_GET['name'];\n?>
\n

الحماية: قم بتشفير المخرجات باستخدام htmlspecialchars():

\n
<?php\necho "مرحبًا، " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');\n?>
\n\n

3. CSRF (Cross-Site Request Forgery)

\n

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

\n

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

\n
<form action="/delete.php" method="POST">\n    <input type="submit" value="حذف الحساب">\n</form>
\n

الحماية: أضف رمز CSRF:

\n
<?php\nsession_start();\n$_SESSION['csrf_token'] = bin2hex(random_bytes(32));\n?>\n<form action="/delete.php" method="POST">\n    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">\n    <input type="submit" value="حذف الحساب">\n</form>
\n\n

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

\n

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

\n

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

\n
<?php\n$password = md5($_POST['password']);\n// أو\n$password = sha1($_POST['password']);\n?>
\n

الحماية: استخدم password_hash() و password_verify():

\n
<?php\n$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);\n// التحقق:\nif (password_verify($input_password, $hash)) {\n    echo "كلمة المرور صحيحة";\n}\n?>
\n\n

5. العمل غير الآمن مع الملفات (Local/Remote File Inclusion)

\n

تضمين الملفات عبر إدخال المستخدم دون تحقق.

\n

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

\n
<?php\ninclude($_GET['page'] . '.php');\n?>
\n

الحماية: استخدم قائمة بيضاء للملفات المسموح بها:

\n
<?php\n$allowed_pages = ['home', 'about', 'contact'];\n$page = $_GET['page'] ?? 'home';\nif (in_array($page, $allowed_pages)) {\n    include($page . '.php');\n} else {\n    include('404.php');\n}\n?>
\n\n

6. إعدادات الجلسات غير الصحيحة

\n

استخدام معرفات جلسة قابلة للتوقع أو عدم إعادة التوليد.

\n

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

\n
<?php\nsession_start();\n$_SESSION['user_id'] = $user_id;\n// لا يتم إعادة توليد الجلسة بعد تسجيل الدخول\n?>
\n

الحماية:

\n
<?php\nsession_start();\nsession_regenerate_id(true); // إعادة توليد المعرف بعد تسجيل الدخول\n$_SESSION['user_id'] = $user_id;\n?>
\n\n

7. التحقق غير الكافي من الإدخال

\n

الثقة في أي بيانات من المستخدم.

\n

ال

المدونات

توصيات الكتب