الإنتهاء من كتابة الوثائق العامه التي تخص مجله صفحتي ... مارأيكم ؟
كأن واجهة تسجيل الدخول مأخوذة من Cpanel
أيضا موقعك به ثغرة SQLi !!
POC
نعم تم أخذ تصاميم كثيرة من عدة أماكن في لحظة ما يمكن تغيير التصميم ولكن المهم كان عندي هو فكرة النظام وعند إكتمال الشرح سيتم إعطاء نسخ تجريبيه لتكتمل الصورة , بالنسبه للثغره لم أفهمها ... مع أني قمت بعمل فلترة لجيمع المتغيرات من خلال هذا الكود البسيط :
function filter_vars($var, $i = 1) {
$search = array('%', '[', ']');
$replace = array('%', '[', ']');
$var = str_replace($search, $replace, $var);
if ($i) {
$var = htmlspecialchars(strip_tags(@addslashes($var)));
}
return $var;
}
هل لديك أي إضافة أو مساعدة بهذا الخصوص ؟ وشكرا مرة أخرى
كود الفلترة هذا لا يفلتر أي شي في حالة نسيت إستدعاء الدالة بهذه الطريقة
filter_vars($_GET['id'],true);
إذا كنت متأكد أنك تريد إستقبال رقم في المتغير
$_GET['id']
حاول تحويله لرقم لتفادي أي مشكل
$_GET['id'] = intval($_GET['id']);
أشكر سرعه الرد :)
الداله السابقة يتم تنفيذها من خلال هذا الكود
/* * ******************************** request vars****************************************** */
foreach ($_REQUEST as $KEy => $VAl) {
if (is_array($_REQUEST[$KEy])) {
foreach ($_REQUEST[$KEy] as $KEy1 => $VAl1) {
if (is_array($$KEy)) {
$$KEy = array_merge($$KEy, array($KEy1 => filter_vars($VAl1)));
} else {
$$KEy = array($KEy1 => filter_vars($VAl1));
}
}
} else {
$$KEy = filter_vars($VAl);
}
}
على كل قمت بإضافة الداله mysql_real_escape_string وتم الموضوع ولكني أفكر في إعادة النظر في المتغيرات المرسله بحيث يكون لها تحقيق خاص حول محتواها كما ذكرت إذا كان المتغير رقمي فيجب أن يتم التحقيق من أنه رقمي وهكذا بالنسبه لباقي المتغيرات .
سؤال : بعد ما يمر المتغير العام $_REQUEST في هذه الحلقة هل تستعمل
$_REQUEST['id']
أم تستعمل المتغير $id الذي ينشء بعد دخوله الحلقة ؟
بصفة عامة طريقتك هذه ليست امنة إطلاقا فأنت تعطي المستخدم القدرة على إنشاء متغيرات كما يحب مثلا : نفترض أنك عندك هذا التحقق :
if(isset($admin)){
$_SESSION['admin'] = true;
}
أستطيع جعل هذا الشرط صحيح بمجرد إستدعاء رابط يحتوي ?admin=1
لا تثق إطلاقا في مدخلات المستخدم
الكود نوعا ما معقد هندسيا , فالأمور ليست كما تظهر في الدوال التي أرسلتها فهناك حزمه من المتغيرات مصنفه على أنها قادمه من المستخدم فإذا تم إستدعاء أي متغير غير موجود في هذه الحزمه فلن يتم التعرف عليه ... هذه الفكرة فقط لإمكانيه التحكم بجميع المتغيرات القادمه وفلترتها دون الحاجه لفلترة كل متغير بشكل منفصل وفي حال أردت كمبرمج أن تعتمد على الأمان بإستخدام $_GET فلا بأس فهي لم تتأثر اما إذا استخدمت المثال السابق
if(isset($admin)){
فيجب أن تتخذ التدابير اللازمه بتصفير المتغير بداية الكود
$admin='';
التعليقات