التحديث الأمني لبرنامج إدارة المحتوى PHP-NUKE
التأريخ: الأحد6/ شعبان/1425 الموافق 19/9/2004 مسيحية
العنوان: البرمجة


تعرضت للاختراق كثير من المواقع المستخدمة لبرنامج php-nuke؛ وذلك لوجود ثغرة أمنية في الإصدارات التي قبل الإصدار 7.5

وفي هذه المقالة أوضح كيفية سد الثغرة، وكيفية حماية مجلد admin



تنبيهان :
1) تختلف أوائل السطور للملفات تبعا لاختلاف الإصدار.
2) تنبه إلى عدم تكرار أمر :
$this->DoCode('
require_once('mainfile.php');
','php')
في أوائل الملفات


أولا :

افتح ملف mainfile.php في الدليل الرئيس للبرنامج

1) ضع في أول الملف :
$this->DoCode('
$queryString = strtolower($_SERVER['QUERY_STRING']);
if(stripos_clone($queryString,'%20union%20') OR tripos_clone($queryString,'/*')) {
header('Location: index.php');
die();
}
','php')

2) ضع في نهاية الملف قبل علامة $this->DoCode('
function stripos_clone($haystack, $needle, $offset=0) {
return strpos(strtoupper($haystack), strtoupper($needle), $offset);
}
','php')

ثانيا: افتح ملف admin.php في الدليل الرئيس، ثم أضف هذه الأسطر في أول الملف
$this->DoCode('
require_once('mainfile.php');
$checkurl = $_SERVER['REQUEST_URI'];
if((stripos_clone($_SERVER['QUERY_STRING'],'AddAuthor')) || (stripos_clone($_SERVER["QUERY_STRING"],'UpdateAuthor')) || (preg_match("/?admin/", "$checkurl")) || (preg_match("/&admin/", "$checkurl"))) {
die('Illegal Operation');
}
','php')

ثالثا: افتح ملف modules.php ، ثم ضع في أوله:
$this->DoCode('
$modstring = strtolower($_SERVER['QUERY_STRING']);
if (stripos_clone($modstring,'&user=') AND ($name=='Private_Messages' || $name=='Forums' || $name=='Members_List')) header('Location: index.php');
','php')

رابعا : افتح ملف modules/News/friend.php ، وضع في أوله
$this->DoCode('
require_once('mainfile.php');
if (stripos_clone($_SERVER['QUERY_STRING'],'%25')) header("Location: index.php");

','php')

هذا ما يتعلق بالتحديث، أما طريقة حماية المجلد

أولا :

أنشئ ملفا باسم

$this->DoCodeTwo(' .htpasswd ')
تنبه إلى وجود النقطة قبل اسم الملف

ثانيا :

ضع بداخله المعرف، وكلمة المرور المشفرة

يمكنك الحصول على التشفير من هنا :

اضفط هنا

ثالثا :

أنشئ ملفا باسم

$this->DoCodeTwo(' .htaccess ')
تنبه إلى وجود النقطة قبل اسم الملف

رابعا :

ضع بداخله ما يلي

$this->DoCodeTwo(' AuthName "أدخل المعرف وكلمة المرور" AuthType Basic AuthUserFile PATH/.htpasswd require valid-user ')

غير كلمة (PATH) إلى موقع الملف (.htpasswd)

فمثلا لو كان موقع هذا الملف هكذا

$this->DoCodeTwo(' /home/html/pass/.htpasswd ')
فإن السطر سيكون هكذا

$this->DoCodeTwo(' AuthUserFile /home/html/pass/.htpasswd ')
ولتسهيل المهمة فقد برمجت برنامجا صغيرا يقوم بهذه العملية نيابة عنك؛ لكن لا تستخدم البرنامج سوى مرة واحدة فقط؛ لأنك إذا كررت استخدام البرنامج فيستضخم ملف (htaccess)

وإنما وضعت البرنامج لتعرف كيف ستكون النتيجة

يمكنك تحميل البرنامج من هنا

مركز التحميل





هذه المقالة مكتوبة في موقع الشنكبوتية
http://www.toarab.ws

الرابط لهذه المقالة :
http://www.toarab.ws/modules.php?name=News&file=article&sid=41