• أهلاً بك زائر في في بيتك الثاني!
    اذا كنت وفيا لمنتدى اللمة بصدق فهو بحاجة لمساهمتك إن مشاركتك ونشاطك يبعثان الحياة فيه ليستمر وينتشر. تفاعل وشاركنا بآرائك، مواضيعك، وإبداعاتك لإثراء المحتوى ونشر الفائدة و كسب الثواب قبل أن نفقد اللمة للأبد كما وقع لباقي المنتديات لاتكتفي بالتفرج.

شرح الترقية للإصدار الأمني vBulletin 3.8.7 PL3

  • كاتب الموضوع كاتب الموضوع Fethi.dz
  • تاريخ النشر تاريخ النشر

Fethi.dz

:: إدارة اللمة الجزائرية ::
طاقم الإدارة
السلام عليكم ورحمة الله و بركاته


البارحة تم صدور الترقيع الأمني vBulletin 3.8.7 PL3 بحيث عالجت فيه الشركة ثغرة أمنية من نوع " فلود "


الملفات المحدثة هي :


  • includes/class_dm_threadpost.php
  • includes/class_floodcheck.php
  • includes/functions.php
  • includes/init.php
  • includes/version_vbulletin.php

لأصحاب الترخيص يمكنهم تحميل الترقيع الأمني من ( منطقة الأعضاء )


للذين لا يملكون الترخيص يمكنهم اتباع الشرح التالي من اجل الترقيع :


أولا : ملف ( class_dm_threadpost.php )

نبحث بداخله على :

كود:
if ($user['lastpost'] <= TIMENOW AND
                    !can_moderate($this->info['forum']['forumid'],   '', $user['userid'], $user['usergroupid'] .   (trim($user['membergroupids']) ? ",$user[membergroupids]" : '')))
                {
نستبدله بالتالي :

كود:
if (!can_moderate($this->info['forum']['forumid'], '',   $user['userid'], $user['usergroupid'] . (trim($user['membergroupids']) ?   ",$user[membergroupids]" : '')))
                {
ثانيا : ملف ( class_floodcheck.php )

نبحث في داخله على :

كود:
// if we updated something, we're not flooding; otherwise, we have to wait
        $this->flood_wait = ($db->affected_rows() > 0 ? 0 :  ($this->read_value - $floodmin_value));
نستبدله بالتالي :

كود:
// if we updated something, we're not flooding; otherwise, we have to wait
        if ($db->affected_rows() > 0)
        {
            // we are not flooding
            $this->flood_wait = 0;
        }
        else
        {
            // we are flooding and have to wait
            $this->flood_wait = $this->read_value - $floodmin_value;

            if ($this->flood_wait == 0)
            {
                $db->query_write("
                    UPDATE " . TABLE_PREFIX . $this->table . " AS " . $this->table . "
                    SET " . $this->read_column . " = " . $this->commit_value . "
                    WHERE " . $this->primary_key . " = " . intval($this->key_value) . "
                    AND " . $this->read_column . " = $floodmin_value
                ");
                if ($db->affected_rows() == 0)
                {
                    // flood wait time is zero and no updated has happened,
                    // this means another post has already been made in this second
                    $this->flood_wait = $this->commit_value - $floodmin_value;
                }
                else
                {
                    $this->flood_wait = 0;
                }
            }
        }



ثالثا : ملف ( functions.php )

نبحث في داخله على :

كود:
return 'standard_redirect("' . $phrase . '", ' . intval($forceredirect) . ');';
نستبدله بالتالي :


كود:
return 'standard_redirect("' . $phrase . '", ' .  intval($forceredirect) . ', ' . ($bypasswhitelist ? 'true' : 'false') .  ');';
نبحث في داخله على :

كود:
function print_standard_redirect($redir_phrase, $doquery = true, $forceredirect = false, $languageid = -1)
نستبدله بالتالي :

كود:
function print_standard_redirect($redir_phrase, $doquery = true, $forceredirect = false, $languageid = -1, $bypasswhitelist = false)
رابعا : ملف ( init.php )

نبحث في داخله على :

كود:
[COLOR=Red]
[/COLOR]if ($http_host AND $_SERVER['HTTP_REFERER'])
        {
            $http_host = preg_replace('#:80$#', '', trim($http_host));
            $referrer_parts = @parse_url($_SERVER['HTTP_REFERER']);
            $ref_port = intval($referrer_parts['port']);
            $ref_host = $referrer_parts['host'] . ((!empty($ref_port) AND $ref_port != '80') ? ":$ref_port" : '');

            $allowed = preg_split('#\s+#', $vbulletin->options['allowedreferrers'], -1, PREG_SPLIT_NO_EMPTY);
            $allowed[] = preg_replace('#^www\.#i', '', $http_host);
            $allowed[] = '.paypal.com';

            $pass_ref_check = false;
            foreach ($allowed AS $host)
            {
                if (preg_match('#' . preg_quote($host, '#') . '$#siU', $ref_host))
                {
                    $pass_ref_check = true;
                    break;
                }
            }
            unset($allowed);

            if ($pass_ref_check == false)
            {
                die('In order to accept POST request originating from this domain, the admin must add this domain to the whitelist.');
            }
        }
    }
}


نستبدله بالتالي :

كود:
if ($http_host AND $_SERVER['HTTP_REFERER'])
        {
            $http_host = strtolower(preg_replace('#:80$#', '', trim($http_host)));
            $referrer_parts = @parse_url($_SERVER['HTTP_REFERER']);
            $ref_port = intval($referrer_parts['port']);
            $ref_host = strtolower($referrer_parts['host'] . ((!empty($ref_port) AND $ref_port != '80') ? ":$ref_port" : ''));

            if ($http_host == $ref_host)
            {    /* Instant match is good enough
                no need to check anything further. */
                $pass_ref_check = true;
            }
            else
            {
                $pass_ref_check = false;
                $allowed = array('.paypal.com');
                $allowed[] = '.'.preg_replace('#^www\.#i', '', $http_host);
                $whitelist = preg_split('#\s+#', $vbulletin->options['allowedreferrers'], -1, PREG_SPLIT_NO_EMPTY); // Get whitelist
                $allowed = array_unique(is_array($whitelist) ? array_merge($allowed,$whitelist) : $allowed); // Merge and de-duplicate.

                foreach ($allowed AS $host)
                {
                    $host = strtolower($host);
                    if (substr($host,0,1) == '.' AND 
                    (preg_match('#' . preg_quote($host, '#') . '$#siU', $ref_host) OR substr($host,1) == $ref_host))
                    {
                        $pass_ref_check = true;
                        break;
                    }
                }
                unset($allowed, $whitelist);
            }

            if ($pass_ref_check == false)
            {
                die('In order to accept POST requests originating from this domain, the admin must add the domain to the whitelist.');
            }
        }
    }
}



خامساً :
ملف ( version_vbulletin.php )

نستبدل محتواه بالتالي :

كود:
<?php
define('FILE_VERSION_VBULLETIN', '3.8.7 Patch Level 3');
?>
هذا ولله التوفيق لنا ولكم
 
توقيع Fethi.dz


بــارك الله فيك علي جلب الجديد
موفق في عملك
​
 
توقيع يونس الصديق
تنبيه: نظرًا لتوقف النقاش في هذا الموضوع منذ 365 يومًا.
قد يكون المحتوى قديمًا أو لم يعد مناسبًا، لذا يُنصح بإشاء موضوع جديد.
العودة
Top Bottom