السيرفر بيشتغل إزاي في الخلفية؟
لما بنتكلم عن موقع إلكتروني، خصوصًا معمول بـ PHP زي موقعك، فيه حاجات كتير بتحصل في الخلفية عشان الزائر يشوف الصفحة على المتصفح. خليني أفسرلك العملية دي زي ما تكون قصة:
-
الـ Request من العميل (Client):
- لما حد (زي زائر الموقع) يكتب عنوان موقعك في المتصفح (مثلًا
www.yoursite.com)، المتصفح بيبعت HTTP request للسيرفر اللي الموقع موجود عليه. - الـ request ده ممكن يكون GET (عايز أجيب صفحة) أو POST (عايز أبعت بيانات زي فورم تسجيل دخول).
- لما حد (زي زائر الموقع) يكتب عنوان موقعك في المتصفح (مثلًا
-
السيرفر بيستقبل الـ Request:
- السيرفر بيكون عليه برنامج زي Apache أو Nginx (في حالتك Apache لأنك بتستخدم XAMPP). البرنامج ده زي البواب اللي بيستقبل الطلبات.
- رApache بيقرأ الـ request ويشوف إنت عايز إيه (مثلًا صفحة
index.phpأو صورة أو ملف CSS).
-
معالجة الـ Request:
- لو الـ request بيطلب حاجة static (زي صورة أو ملف JavaScript)، Apache بيروح يجيب الملف من السيرفر ويبعته للعميل على طول.
- لو الـ request بيطلب حاجة dynamic (زي صفحة PHP)، هنا بيحصل حاجات زيادة:
- اApache بيبعت ملف الـ PHP (زي
index.php) لبرنامج اسمه PHP engine (موجود في XAMPP). - الـ PHP engine بيقرأ الكود بتاعك، وبيشتغل مع السيرفر أو قاعدة بيانات (زي MySQL اللي في XAMPP) لو فيه استعلامات (queries) زي استرجاع بيانات المستخدمين.
- الـ PHP engine بيحوّل الكود بتاعك لـ HTML عشان المتصفح يفهمه.
- اApache بيبعت ملف الـ PHP (زي
- رApache بياخد الـ HTML ده ويبعته للعميل في شكل HTTP response.
-
الـ Response يوصل للعميل:
- المتصفح بياخد الـ response (اللي هو الـ HTML، الصور، CSS، إلخ) وبيبدأ يعرضه للزائر.
البروسيس اللي بتحصل في الخلفية (باختصار)
- Apache بيستقبل الـ request.
- لو الملف PHP، بيمرره لـ PHP engine.
- لو فيه قاعدة بيانات (زي MySQL)، الـ PHP بيتعامل معاها.
- السيرفر بيبعت النتيجة (عادةً HTML) للمتصفح.
إيه هو XAMPP وعلاقته بـ Apache؟
رXAMPP هو برنامج بيجمع كذا أداة مع بعض عشان تساعدك تعمل بيئة تطوير (development environment) على جهازك الشخصي. فكر فيه زي “مطبخ جاهز” فيه كل الأدوات اللي هتحتاجها عشان تطبخ موقعك بـ PHP. الحروف في XAMPP معناها:
- رX: يعني يشتغل على أي نظام تشغيل (Windows، Linux، macOS).
- رA: Apache (الـ web server).
- رM: MySQL أو MariaDB (قاعدة بيانات).
- رP: PHP (لغة البرمجة).
- رP: Perl (لغة برمجة إضافية، بس مش بنستخدمها كتير في الـ web).
إزاي XAMPP بيشتغل؟
- لما نزلت XAMPP، أنت فعليًا نزلت Apache كـ web server، وPHP كلغة برمجة، وMySQL كقاعدة بيانات.
- عشان موقعك الـ PHP يشتغل، لازم Apache يكون شغال، لأنه هو اللي بيستقبل الـ HTTP requests ويمرر ملفات الـ PHP للـ PHP engine.
- لما بتفتح XAMPP Control Panel وتعمل Start على Apache، ده بيخلّي جهازك يبقى زي سيرفر صغير. لو كتبت في المتصفح
http://localhost، هتشوف الموقع بتاعك. - الملفات بتاعة موقعك لازم تتحط في مجلد اسمه htdocs جوا مجلد XAMPP (مثلًا:
C:\xampp\htdocs).
ليه Apache لازم يكون شغال؟
- Apache هو اللي بيفهم إزاي يتعامل مع الطلبات اللي جاية من المتصفح.
- من غير Apache (أو أي web server زي Nginx)، ملفات الـ PHP هتفتح زي ملفات نص عادية ومش هتتنفذ، لأن PHP محتاجة web server ينفذ الكود ويحوله لـ HTML.
إزاي الموضوع ده يفيدك في Penetration Testing؟
في penetration testing، لما بتحاول تختبر موقع، لازم تفهم إزاي السيرفر شغال عشان تعرف نقاط الضعف (vulnerabilities). Apache وNginx ليهم تأثير كبير على أمان الموقع، وكمان XAMPP لو مستخدمه غلط ممكن يكون كارثة من ناحية الأمان. خليني أشرحلك النقاط اللي هتفيدك:
1. فهم إعدادات السيرفر (Server Configuration)
-
Apache:
- بيستخدم ملفات زي httpd.conf أو .htaccess للإعدادات. لو الإعدادات دي مش مضبوطة، ممكن تكون نقطة ضعف.
- Vulnerabilities شائعة:
- ءDirectory Listing: لو السيرفر مش مضبوط، ممكن تدخل على مجلدات الموقع (زي
http://site.com/images/) وتشوف ملفات المفروض ماتشوفهاش. - ءMisconfigured .htaccess: لو الملف ده مش محمي، ممكن حد يعدل عليه ويفتح ثغرات.
- ءOld Apache Versions: لو السيرفر بيستخدم نسخة قديمة من Apache، ممكن تكون فيه ثغرات معروفة (زي CVE vulnerabilities).
- ءDirectory Listing: لو السيرفر مش مضبوط، ممكن تدخل على مجلدات الموقع (زي
- نصيحة للـ Pentesting:
- استخدم أدوات زي Nmap أو Nikto عشان تسكان السيرفر وتشوف إصدار Apache وإعداداته.
- جرب تسكان الـ ports (زي port 80 أو 443) عشان تشوف إيه الخدمات اللي شغالة.
- ابحث عن ملفات .htaccess مكشوفة أو إعدادات غلط زي AllowOverride All في httpd.conf.
-
Nginx:
- إعداداته في ملف nginx.conf أو ملفات في مجلد sites-available.
- Vulnerabilities شائعة:
- Misconfigured Nginx: لو الـ server block مش مضبوط، ممكن تكشف ملفات حساسة.
- Default Configurations: لو السيرفر لسه بإعداداته الافتراضية، ممكن تكون فيه ثغرات معروفة.
- Improper Access Controls: لو مافيش قيود على الملفات، ممكن تدخل على حاجات زي
/etc/nginx/أو ملفات الـ logs.
- نصيحة للـ Pentesting:
- ابحث عن default pages (زي
http://site.com/nginx_status)، لأن كتير من السيرفرات بتسيب الصفحة دي مفتوحة وبتدي معلومات عن السيرفر. - جرب هجمات زي Path Traversal (مثل
http://site.com/../etc/nginx/nginx.conf) عشان تشوف لو فيه ملفات مكشوفة.
- ابحث عن default pages (زي
2. فهم PHP والـ Backend
- بما إنك بتبرمج بـ PHP، لازم تفهم إزاي الـ PHP engine بيشتغل مع Apache:
- ءPHP بيتنفذ على السيرفر، يعني لو فيه ثغرة في الكود بتاعك (زي SQL Injection أو Remote Code Execution)، المهاجم ممكن يستغلها.
- ءXAMPP بيجي مع إعدادات افتراضية مش آمنة جدًا، زي إن PHP يكون فيه display_errors مفعّل، وده بيخلّي السيرفر يعرض أخطاء حساسة لو الكود فيه مشكلة.
- نصيحة للـ Pentesting:
- لو بتختبر موقع PHP، جرب هجمات زي:
- ءSQL Injection: لو الموقع بيستخدم MySQL (زي في XAMPP)، جرب تدخل أوامر SQL في الفورمات (مثل
' OR '1'='1). - ءFile Inclusion: جرب هجمات زي Local File Inclusion (LFI) أو Remote File Inclusion (RFI) لو الموقع بيسمح بتحميل ملفات أو بياخد باراميترات زي
?page=../../etc/passwd. - ءCross-Site Scripting (XSS): لو الموقع مش بيعمل input validation، جرب تحط كود JavaScript في الفورمات.
- ءSQL Injection: لو الموقع بيستخدم MySQL (زي في XAMPP)، جرب تدخل أوامر SQL في الفورمات (مثل
- افحص إعدادات php.ini (في XAMPP هتلاقيه في
C:\xampp\php\php.ini). لو حاجات زي allow_url_include أو register_globals مفعّلة، دي ثغرات خطيرة.
- لو بتختبر موقع PHP، جرب هجمات زي:
3. XAMPP ونقاط ضعفه
- ءXAMPP مش معمول للاستخدام في بيئة إنتاج (production)، يعني هو للتطوير بس. لو حطيته على سيرفر مكشوف على الإنترنت، هتبقى كارثة!
- نقاط ضعف شائعة:
- ءDefault Credentials: XAMPP بيجي مع MySQL وإعدادات افتراضية (زي username:
rootوpassword: فاضي). لو ماغيرتهمش، أي حد ممكن يدخل على قاعدة البيانات. - ءOpen Ports: Apache بيفتح port 80 (HTTP) وport 443 (HTTPS إذا مفعّل). لو السيرفر مكشوف، المهاجم ممكن يسكان الـ ports دي.
- ءXAMPP Control Panel: لو مكشوف على الإنترنت (زي
http://localhost/xampp)، ممكن المهاجم يوصل ليه ويستغل إعداداته.
- ءDefault Credentials: XAMPP بيجي مع MySQL وإعدادات افتراضية (زي username:
- نصيحة للـ Pentesting:
- لو بتختبر سيرفر معمول عليه XAMPP، جرب تسكان الـ ports بـ Nmap (
nmap -sV <IP>). - ابحث عن صفحات زي
/phpmyadmin(لأن XAMPP بيجي مع phpMyAdmin)، وجرب هجمات زي brute force على الـ credentials. - جرب تشوف لو فيه default pages أو ملفات زي
C:\xampp\htdocs\index.phpمكشوفة.
- لو بتختبر سيرفر معمول عليه XAMPP، جرب تسكان الـ ports بـ Nmap (
4. نصايح عامة للـ Penetration Testing على السيرفرات
- ءServer Fingerprinting: استخدم أدوات زي WhatWeb أو Wappalyzer عشان تعرف الموقع بيستخدم Apache ولا Nginx، وإيه إصداراتهم.
- ءCheck for Exposed Files: جرب تدور على ملفات حساسة زي:
- ء
/server-status(في Apache): بيدي معلومات عن السيرفر لو مفعّل. - ء
/nginx_status(في Nginx): نفس الفكرة. - ملفات logs زي
/var/log/apache2/access.logأو/var/log/nginx/error.log.
- ء
- ءTest for Misconfigurations: جرب هجمات زي HTTP Method Testing (مثل استخدام PUT أو DELETE لو السيرفر بيسمح بيهم).
- ءUse Automated Tools: أدوات زي Burp Suite، OWASP ZAP، أو Metasploit هتساعدك تكتشف ثغرات بسرعة.
- ءLearn Common Vulnerabilities: ركّز على الثغرات الشائعة زي CVE-2021-41773 (لـ Apache) أو أي ثغرة جديدة بتظهر في CVEdetails.com.
5. نصايح ليك كمبرمج PHP
- ءSecure Your Code:
- استخدم prepared statements في MySQL عشان تتجنب SQL Injection.
- نظّف المدخلات (inputs) باستخدام دوال زي
htmlspecialchars()عشان تتجنب XSS. - ماتستخدم دوال زي
eval()أوsystem()في الكود، لأنها ممكن تفتح ثغرة Remote Code Execution.
- ءSecure XAMPP:
- غيّر كلمة السر بتاعة MySQL من XAMPP Control Panel.
- ماتخلّيش XAMPP مكشوف على الإنترنت (يعني ماتفتحش port 80 أو 443 في الراوتر).
- ماتسيبش phpMyAdmin مفتوح من غير حماية (زي كلمة سر قوية).
- ءTest Your Site: استخدم أدوات زي OWASP ZAP عشان تختبر موقعك بنفسك وتشوف لو فيه ثغرات.