RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - support - 2014-09-25
بالنسبه للاكواد التي تثبت مقصدي واللي علي اساسها وضعت لك هذا التحليل
اولا عمليه سحب المعلومات من جدول اعضاء الفي بي
كود : function import()
{
global $import_session;
// Get members
$query = $this->old_db->simple_select("user", "*", "", array('order_by' => 'userid', 'order_dir' => 'asc', 'limit_start' => $this->trackers['start_users'], 'limit' => $import_session['users_per_screen']));
while($user = $this->old_db->fetch_array($query))
{
$this->insert($user);
}
}
بعد ما قام بسحب المعلومات يذهب ليسجل كل حقل من الفي بي الي الحقل المشابه له في الماي بي بي ( لاحظ الخطوه دي )
كود : function convert_data($data)
{
$insert_data = array();
// vBulletin 3 values
$insert_data['usergroup'] = $this->board->get_group_id($data['usergroupid'], array("not_multiple" => true));
$insert_data['additionalgroups'] = str_replace($insert_data['usergroup'], '', $this->board->get_group_id($data['usergroupid']));
$insert_data['displaygroup'] = $this->board->get_group_id($data['usergroupid'], array("not_multiple" => true));
$insert_data['import_usergroup'] = $this->board->get_group_id($data['usergroupid'], array("original" => true));
$insert_data['import_additionalgroups'] = $this->board->get_group_id($data['usergroupid'], array("original" => true));
$insert_data['import_displaygroup'] = $data['displaygroupid'];
$insert_data['import_uid'] = $data['userid'];
$insert_data['username'] = encode_to_utf8($data['username'], "user", "users");
$insert_data['email'] = $data['email'];
$insert_data['regdate'] = $data['joindate'];
$insert_data['lastactive'] = $data['lastactivity'];
$insert_data['lastvisit'] = $data['lastvisit'];
$insert_data['website'] = $data['homepage'];
$avatar = $this->get_avatar($data['avatarid']);
if(!$avatar)
{
$customavatar = $this->get_custom_avatar($data['userid']);
if(!$customavatar)
{
$insert_data['avatardimensions'] = '';
$insert_data['avatar'] = '';
$insert_data['avatartype'] = '';
}
}
else
{
list($width, $height) = @getimagesize($avatar['avatarpath']);
$insert_data['avatardimensions'] = $width.'|'.$height;
$insert_data['avatar'] = $avatar['avatarpath'];
$insert_data['avatartype'] = 'remote';
}
$insert_data['lastpost'] = $data['lastpost'];
$data['birthday'] = trim($data['birthday']);
if(!empty($data['birthday']))
{
$insert_data['birthday'] = $data['birthday'];
}
$insert_data['icq'] = $data['icq'];
$insert_data['aim'] = $data['aim'];
$insert_data['yahoo'] = $data['yahoo'];
$insert_data['msn'] = $data['msn'];
$insert_data['timezone'] = str_replace(array('.0', '.00'), array('', ''), $insert_data['timezone']);
$insert_data['style'] = 0;
$insert_data['referrer'] = $data['referrerid'];
$insert_data['regip'] = $data['ipaddress'];
$insert_data['totalpms'] = $data['pmtotal'];
$insert_data['unreadpms'] = $data['pmunread'];
$insert_data['passwordconvert'] = $data['password'];
$insert_data['passwordconverttype'] = 'vb3';
$insert_data['passwordconvertsalt'] = $data['salt'];
$insert_data['signature'] = encode_to_utf8($this->bbcode_parser->convert($this->get_signature($data['userid'])), "user", "users");
return $insert_data;
}
دي المعلومات اللي سحبها ووضعها بمصفوفه ليتم سحب المطلوب واللي يهمني هنا ان نري انه اضاف ثلاث حقول كما قلت وهما
كود : $insert_data['passwordconvert'] = $data['password'];
$insert_data['passwordconverttype'] = 'vb3';
$insert_data['passwordconvertsalt'] = $data['salt'];
اخذ محتوي حقل الباسورد من الفي بي ووضعه داخل حقل passwordconvert واخذ محتوي حقل salt ووضعه في حقل passwordconvertsalt
والحقل الثالث اضع كلمه ثابته لكي يعلم علي اسكربت سوف يتم التحويل
ونري ايضا انه لم يقم بتسجيل شي في حقل password + salt وتركهم فارغين لحين التحويل ثم حيعيد تعبئتهم
نري طريقة التحويل : ( هناك بعض الاكواد خاصه بالتأكد من وجود محتوي وعدم وجود اخطاء وما الي ذلك فلم اذكره فقط حذكر المفيد لكي تضح لك الفكره )
كود : // The password was correct, so use MyBB's method the next time (even if the captcha was wrong we can update the password)
$salt = generate_salt();
$update = array(
"salt" => $salt,
"password" => salt_password(md5($login->data['password']), $salt),
"loginkey" => generate_loginkey(),
"passwordconverttype" => "",
"passwordconvert" => "",
"passwordconvertsalt" => "",
);
$db->update_query("users", $update, "uid='{$user['uid']}'");
هنا قام بعمل salt عشوائي من خلال الداله اللي ذكرنها من قبل بالموضوع والموقع الرسمي وبالنسبه للباس قام بتحديثه هنا ووضع ال salt ثم الباس
والثلاث حقول تركهم فارغين وعمل امر update للقاعده كما نري بالاخير وبعدها بيتم حذف الثلاث حقول
هذا اللي توصلت له بشكل سريع لتحليل عمليه التحويل
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25
بارك الله فيك
ماقصرت
اريد اقول لك الجزئية اللي فهمتها من مشاركتك..
وهي ان السكريبت اضاف اعمدة جديدة لكلمة المرور واالـ salt
وعبأهم ببيانات من جدول vbulletin
ثم قام بتوليد salt جديد لكي يحفظ بالقاعدة الخاصة بـ Mybb
الان اظن نصف المهمة فهمتها بقيت النقطتان الاتيتان:
كود : salt_password(md5($login->data['password']), $salt),
كلمة $login ماهي؟
النقطة الاخرى هي:
هل يتم التوليد بناء على اسم المستخدم او كلمة المرور واين اجد هذه الدالة وهل هذه الدالة فقط في سكريبت التحويل؟
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25
وجدت هذه الدالة
generate_loginkey()
كود : function generate_loginkey()
{
return random_str(50);
}
هل معناها توليد 50 حرف؟ ام لا؟
ام هل
random_str(50)
هي دالة ايضا؟؟؟
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25
نعم وجدتها دالة ايضا
طريقتهم ملفوفة ومعقدة دالة تجيب دالة
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - support - 2014-09-25
نعم random_str هي داله تقوم بانشاء رقم عشوائي وتحدد العدد الذي تريده كما رايت 50 حرف
$login هذا متغير يجلب محتوي الخانه باسورد
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25
ياليت تركبون هاك شكر!
احيانا الواحد يستحي يقول شكرا لكن الزر يفي بشيء من الغرض
بارك الله فيك.
بعد اذنك سابدا بتطبيق - (بشكل منفصل عن الفكرة الاساسية)- جلب مستخدم وضبط البيانات لكي يعمل من دون تغيير لكلمة المرور.
الى اللقاء.
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25
تدري كم دالة وجدتها متداخلة؟
اول دالة هي: كود : function generate_salt()
{
return random_str(8);
}
وهذي تؤدي الى
كود : function random_str($length="8")
{
$set = array("a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z","1","2","3","4","5","6","7","8","9");
$str = '';
for($i = 1; $i <= $length; ++$i)
{
$ch = my_rand(0, count($set)-1);
$str .= $set[$ch];
}
return $str;
}
وهذي تؤدي الى
كود : function my_rand($min=null, $max=null, $force_seed=false)
{
static $seeded = false;
static $obfuscator = 0;
if($seeded == false || $force_seed == true)
{
mt_srand(secure_seed_rng());
$seeded = true;
$obfuscator = abs((int) secure_seed_rng());
// Ensure that $obfuscator is <= mt_getrandmax() for 64 bit systems.
if($obfuscator > mt_getrandmax())
{
$obfuscator -= mt_getrandmax();
}
}
if($min !== null && $max !== null)
{
$distance = $max - $min;
if($distance > 0)
{
return $min + (int)((float)($distance + 1) * (float)(mt_rand() ^ $obfuscator) / (mt_getrandmax() + 1));
}
else
{
return mt_rand($min, $max);
}
}
else
{
$val = mt_rand() ^ $obfuscator;
return $val;
}
}
اول كود كتبته بفيجوال بيسك ووقفت مدهوش من التعقيد
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25
فيه رموز لا افهمها مثل || ببرمجة php مثل هذي
if($seeded == false || $force_seed == true)
{
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - support - 2014-09-26
طبيعي تجد اشياء معقده فامور التحويل ليست بالشي السهل وتختلف من برمجيه الي برمجيه
بالنسبه للرمز || يقصد به أو
مثل بالانجليزيه OR
RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-26
بارك الله فيك اخي support
|