الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة مع Register_global

بدأه Mohammad Hussein في 31 مايو 2009 · 4 رد · 594 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

لدي موقع و استخدم به Moodle, و عملت register_global off , لاسباب الحماية

لكن لدي مجلد يحتوي على 5 صفحات, و كل صفحة تمثل موضوع و اصل لها من خلال رابط يحتوي على اسم الصفحة المطلوبة.

اي اعمل على مناداة الصفحة من خلال اراسال parameter.

مثلا

لدي المجلد cs , و بداخلة ( مجلد اسمة pages , و صفحة index.php ) كلاهما على نفس المستوى طبعا.

داخل مجلد pages يوجد عدة صفحات PHP files , و و لكل صفحة عنوان و مخزن بها المحتوى.

و اعمل على الوصول للصفحة كالتالي:

<a href="/cs/?sf=IT1"> title </a>

داخل صفحة index.php يوجد التالي

$script_file = "pages/".$sf.".php";
if (file_exists($script_file)) include $script_file;
else print "No File Found";

و بما ان Global Register = off لا استطيع اسال اسم الصفحة كالتالي

<a href="/cs/?sf=IT1"> title </a>

هل هناك طريقة لكتابة الكود السابق بحيث يعمل على اسال parameter و عندي هنا هو اسم الصفحة . و استقبالة و حتى لو كان

Register Global off ؟؟

الرجاء التوضيح مع مثال ان امكن و شكرا

/محمد

تم تعديل هذه المشاركة بواسطة Mohammad Hussein في 31 مايو 2009 في 17:13

#2

راجع موضوع الثغرات وطرق الحمايه منها .. هناك داله تم عملها تحل مشكلتك ولكن ينقصها بعد المهام مثل المتغيرات التي تحتوي على مصفوفه فقط تقوم بوضع سطرين في ملف الكونف وتترك باقي مشروعك كما هو وبذلك يتم فلترة المتغيرات وتعريفها , الأمر بسيط ولكن تحتاج لمعرفة مدى المفلترة المطلوبه فإذا كنت تسمح للمستخدم بإرسال بيانات تحتوي على كود هتمل فيجب أن تخفف من مستوى الفلترة هنا مثال لفلترة عاليه لاتسمح بأي متغير مشبوه:

foreach($_GET as $KEy => $VAl){ $$KEy=htmlspecialchars(strip_tags(addslashes($VAl))); }
foreach($_POST as $KEy => $VAl){ $$KEy=htmlspecialchars(strip_tags(addslashes($VAl))); }

وهنا فلتره عادية فقط لإغلاق ثغرة حقن قاعدة البيانات :

foreach($_GET as $KEy => $VAl){ $$KEy=addslashes($VAl); }
foreach($_POST as $KEy => $VAl){ $$KEy=addslashes($VAl); }

بالعادة أستخدم الفلترة العاليه في الصفحات العادية والفلتره العادية لصفحات التحكم بالموقع

في حالة المنتغيرات التي تحتوي على مصفوفه فيجب إستدعاء المتغير بالطريقه التقليديه

$_GET['a']

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#3

برأيي اكتب

$sf = $_GET['sf'];

اذا وضعت ال for loop انت تسمح لاي شخص بانشاء اي متغير في برنامجك.... احيانا كثيرة حتى اذا ما كان يحتوي المتغير اي شي "مشبوه" هذا ممكن يستخدم للضرر ببرنامجك... ممكن اضع لكم مثال لكن اعتقد الموضوع واضح

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

#4

هلا بالأخ ريان ,,, مشتاقين :)

ياريت توضح مثال عن الثغرة مشان نشوف شو الحلول الممكنه , يعني زي ماقال الأخ بكون الموقع مشغول من سنه أو أكثر وعمليه تعريف المتغيرات بالطريقه إللي ذكرتها تحتاج وقت طويل جدا , فممكن إذا عرفنا حجم الثغره نقدر نعدل على الكود ونسكر الثغرة

وشكرا لك

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#5

مشكلة الثغرة هذي انها تسبب نتائج صعب توقعها و تعتمد على الكود....

ممكن يستخدمها المهاجم لوحدها لكن غالبا تندمج مع حاله يكون فيها متغير نسيت تعمل له initialization مثلا

<?php
//login.php
//assume we forgot the next line, or for some reason it didnt execute
//$autherized=false;

//authentication process
$autherizationLevel = authentication($username,$password);

if(autherizationLevel > 5)
$autherized=true;

?>

call the page as
login.php?autherized=1

طبعا بالمثال هذا فيه خطأ اخر وهو مسألة ال initialization لكن هذا لتسهيل الامر فقط... ممكن استغلال الثغرة بدون ثغرة اخرى مساندة

طبعا للامانة الموضوع خطورته غالبا فقط في حالة استطاع المهاجم قراءة الكود او جزء منه (حتى يعرف اسماء المتغيرات) لكن مافيه سبب للمخاطرة بشي مثل هذا برأيي..... ولافيه سبب تسمح لهم بانشاء متغيرات في برنامجك (خارج المصفوفات المحددة)

php5-zce-logo-new.gif

CCNA, CCNA Security, CCNP

مواضيع مشابهة