أهم أخطاء مطوري PHP المبتدئين: من الألف إلى الياء

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

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

ابدأ الدورة

أهم أخطاء مطوري PHP المبتدئين: من الألف إلى الياء



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



1. أخطاء الأمان: الحقن (Injections) و XSS



حقن SQL (SQL Injections)



الخطأ الأكثر شيوعًا وخطورة هو إدخال بيانات المستخدم مباشرة في استعلام SQL. لا تفعل هذا أبدًا:



<?php// ❌ خطير: ثغرة لحقن SQL$id = $_GET['id'];$query = "SELECT * FROM users WHERE id = $id";$result = mysqli_query($conn, $query);?>


يمكن للمهاجم إرسال id=1; DROP TABLE users-- وتدمير قاعدة البيانات. استخدم دائمًا الاستعلامات المحضرة (prepared statements):



<?php// ✅ آمن: استعلام محضر$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");$stmt->bind_param("i", $_GET['id']);$stmt->execute();$result = $stmt->get_result();?>


هجمات XSS (Cross-Site Scripting)



عرض بيانات المستخدم دون تهريب (escaping) هو خطأ كلاسيكي آخر لمطوري PHP:



<?php// ❌ خطير: ثغرة XSSecho "مرحبًا، " . $_GET['name'];?>


إذا قام المستخدم بإرسال ?name=<script>alert('XSS')</script>، فسيتم تنفيذ السكريبت. استخدم الدالة htmlspecialchars():



<?php// ✅ آمن: تهريب HTMLecho "مرحبًا، " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');?>


2. مشاكل أنواع البيانات والمقارنة



التحويل الضمني للأنواع (Implicit Type Casting)



PHP هي لغة ذات كتابة ضعيفة (weakly typed)، وغالبًا ما يقع المبتدئون في سلوك غير متوقع:



<?php// ❌ خطأ: تحويل ضمنيvar_dump("123abc" == 123); // true! يتم تحويل السلسلة النصية إلى رقمvar_dump(0 == "string");   // true! يتم تحويل السلسلة النصية إلى 0?>


استخدم المقارنة الصارمة === بدلاً من ==:



<?php// ✅ صحيح: مقارنة صارمةvar_dump("123abc" === 123); // falsevar_dump(0 === "string");   // false?>


الخلط بين empty() و isset()



العديد من مطوري PHP المبتدئين لا يفهمون الفرق بين هاتين الدالتين:



<?php$var = 0;// ❌ خطأ: empty() تعتبر 0 قيمة فارغةif (empty($var)) {    echo "المتغير فارغ"; // سيتم طباعة هذه الرسالة!}

// ✅ صحيح: isset() تتحقق فقط من الوجودif (isset($var)) { echo "المتغير موجود وقيمته " . $var; // ستطبع "0"}?>


3. الممارسات السيئة في التعامل مع النماذج والبيانات



تجاهل التحقق من الصحة على الخادم (Server-side Validation)



غالبًا ما يعتمد المطورون المبتدئون فقط على التحقق من الصحة من جانب العميل (JavaScript)، لكن المهاجم يمكنه إرسال طلب مباشرة إلى الخادم. تحقق دائمًا من البيانات على جانب الخادم:



<?php// ❌ خطأ: لا يوجد تحقق من الصحة على الخادم$email = $_POST['email'];mail($email, "الموضوع", "الرسالة"); // يمكن إرسال بريد إلكتروني إلى أي عنوان

// ✅ صحيح: نتحقق من البريد الإلكتروني$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);if ($email === false) { die("بريد إلكتروني غير صحيح");}mail($email, "الموضوع", "الرسالة");?>


معالجة غير صحيحة لرفع الملفات



خطأ آخر نموذجي لمطوري PHP هو حفظ الملفات دون التحقق من الامتداد ونوع MIME:



<?php// ❌ خطير: يمكن رفع PHP shellmove_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);

// ✅ آمن: نتحقق من الامتداد$allowed = ['jpg

المدونات

توصيات الكتب