إصلاح ثغرة XSS في PHP باستخدام htmlspecialchars

x32x01
  • بواسطة x32x01 ||
ثغرة XSS (Cross Site Scripting) تعتبر من أخطر وأشهر الثغرات الموجودة في تطبيقات الويب 🌐
والسبب الرئيسي لظهورها غالبًا هو إن الموقع يعرض مدخلات المستخدم بدون فلترة أو حماية.

يعني ببساطة:
لو المستخدم قدر يكتب كود JavaScript ويتنفذ داخل صفحة الموقع… يبقى عندك ثغرة XSS ⚠️

في البوست ده هنفهم:
  • يعني إيه ثغرة XSS
  • إزاي الهاكر يستغلها
  • وإزاي نصلحها في PHP باستخدام دالة htmlspecialchars
وكل ده بطريقة سهلة مع أمثلة كود حقيقية 👨‍💻

ما هي ثغرة XSS ولماذا تعتبر خطيرة؟​

ثغرة Cross Site Scripting (XSS) بتحصل لما الموقع يسمح للمستخدم إنه يضيف كود يتم تنفيذه داخل المتصفح.
المهاجم ممكن يستغل الثغرة دي في حاجات خطيرة جدًا مثل:
💀 سرقة Cookies الخاصة بالمستخدم
💀 سرقة Sessions وتسجيل الدخول بدل الضحية
💀 تنفيذ أكواد JavaScript خبيثة
💀 إعادة توجيه المستخدم لمواقع مزيفة​
وعشان كده ثغرة XSS موجودة دائمًا ضمن قائمة OWASP Top 10 لأخطر ثغرات الويب.



مثال على كود PHP يحتوي على ثغرة XSS​

خلينا نشوف مثال بسيط على كود PHP Vulnerable 👇
PHP:
<?php echo "Welcome " . $_GET["name"]; ?>
المشكلة هنا إن الكود بيعمل حاجتين:
1️⃣ يستقبل بيانات من المستخدم
2️⃣ يعرضها مباشرة داخل الصفحة​
بدون أي فلترة أو حماية ❌

يعني لو المستخدم دخل الرابط التالي:
HTML:
https://target.com?name=Ahmed<script>alert(document.domain)</script>
هيتم تنفيذ كود JavaScript داخل الصفحة مباشرة.

والنتيجة؟
المتصفح هيشغل الأمر: alert(document.domain)
وده دليل إن الموقع مصاب بثغرة XSS.



كيف يستغل الهاكر هذه الثغرة؟​

المهاجم غالبًا بيعمل لينك خبيث ويرسله للضحية.
مثال:
HTML:
https://target.com?name=<script>stealCookies()</script>
لو المستخدم فتح الرابط، الكود هيتنفذ داخل المتصفح بدون ما يحس 😨

وساعتها ممكن يحصل:
🔓 سرقة الكوكيز
🔓 سرقة الجلسة Session
🔓 تنفيذ عمليات باسم المستخدم​



الحل: استخدام دالة htmlspecialchars في PHP​

لحسن الحظ، حل المشكلة بسيط جدًا.
PHP بتوفر دالة اسمها htmlspecialchars وظيفتها تحويل الأحرف الخطيرة إلى نص عادي.
الأحرف اللي بتحولها الدالة مثل: < > " ' &
بدل ما تتحول إلى كود HTML أو JavaScript… تتحول إلى نص آمن.



مثال على الكود الآمن​

خلينا نشوف نفس الكود بعد إصلاح الثغرة 👇
PHP:
<?php echo htmlspecialchars($_GET['name']); ?>
اللي حصل هنا إننا عملنا:
1️⃣ استقبال البيانات
2️⃣ تمريرها لدالة htmlspecialchars
3️⃣ بعد كده يتم عرضها​



ماذا يحدث بعد استخدام htmlspecialchars؟​

لو المستخدم حاول نفس الهجوم:
HTML:
https://target.com?name=Ahmed<script>alert(document.domain)</script>
بدل تنفيذ الكود… الصفحة هتعرضه كنص عادي.
يعني هيظهر كده:
HTML:
Ahmed<script>alert(document.domain)</script>
بدون تنفيذ JavaScript 🚫
وده معناه إن الثغرة تم إصلاحها بنجاح.



مثال عملي يوضح الفرق​

كود مصاب​

PHP:
<?php echo $_GET['name']; ?>
النتيجة:
❌ تنفيذ كود JavaScript



كود آمن​

PHP:
<?php echo htmlspecialchars($_GET['name']); ?>
النتيجة:
✅ عرض النص فقط بدون تنفيذ الكود



أفضل ممارسات الحماية من XSS​

عشان تحمي موقعك من Cross Site Scripting اتبع النصائح دي:
🛡️ فلترة كل مدخلات المستخدم
🛡️ استخدم htmlspecialchars() عند عرض البيانات
🛡️ استخدم Content Security Policy (CSP)
🛡️ لا تثق في أي بيانات تأتي من المستخدم
🛡️ تحقق من المدخلات دائمًا​
الأمن في البرمجة بيبدأ من عدم الثقة في المدخلات.



فيديو شرح عملي​

لو حابب تشوف شرح عملي لثغرة XSS وطريقة إصلاحها:
Video thumbnail



خلاصة البوست ده​

ثغرة XSS من أكثر الثغرات انتشارًا في تطبيقات الويب.
وغالبًا سببها الرئيسي هو عرض مدخلات المستخدم بدون فلترة.

لكن باستخدام دالة بسيطة زي: htmlspecialchars()
تقدر تمنع تنفيذ الأكواد الخبيثة وتحمي موقعك من الهجمات.
لو بتطور مواقع باستخدام PHP لازم تعتبر حماية المدخلات خطوة أساسية في كل مشروع.
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
220
x32x01
x32x01
x32x01
الردود
0
المشاهدات
213
x32x01
x32x01
x32x01
الردود
0
المشاهدات
215
x32x01
x32x01
x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
2,511
المشاركات
2,704
أعضاء أكتب كود
577
أخر عضو
سراب
عودة
أعلى