الملف المسؤول عن تشفير ألقوريثم تشفير باسوردات الأعضاء

  • This topic has 8 ردود, 3 مشاركون, and was last updated قبل شهر by .
مشاهدة 10 مشاركات - 1 إلى 10 (من مجموع 11)
  • الكاتب
    المشاركات
  • #35183
    Avatar of الصاعقةالصاعقة
    مشارك

    السلام عليكم
    الحمد لله قمت بعملية تحويل منتديات vb إلى مدونة wp بكل نجاح والحمد لله اللي تم تحويله
    ☑ حل مشكلة الترميز
    ☑ الأعضاء
    ☑ المجموعات
    ☑ الأقسام
    ☑ المواضيع
    ☑ المرفقات
    ☑ الردود
    ☑ BBcode سواء للصندوق الإفتراضي أو الصندوق الماسي
    ☑ الروابط ( من خلال .htaccess )
    ☑ AFV Plugin لعرض المرفقات المحولة في المواضيع والردود

    مثل ما تعرفو انه طريقة تشفير الباسوردات تختلف من الـ vb والـ wp

    هل في طريقة اني أخلي تسجيل دخول بالمدونة بنفس باسورد الورد بريس

    ولو حتى نعدل على ملف تسجيل الدخول

    اذا احد عنده مساعدة أو ملاحظة ياليت ما يبخل علينا بيها

    #35254
    Avatar of sidatisidati
    مشارك

    قم بنقل كل salt إلى جدول usermeta ويجب ان يكون كل سالت مربوطا بـ يوزر بالتزامن مع نقل كلمات المرور في الـ فيبي كما هي ووضعها في خانة الـ الباسوورد داخل جدول الاعضاء الخاص بالووردبريس، بعد ذلك تقوم من خلال الفيلتر check_password بعمل التحقق من كلمة المرور فقط في حالة الخطأ لأن اذا كان التحقق صحيحا فهذا بالطبع ليس عضو الفيبي بل هو عضو ووردبريس لان عضو الفيبي يجب ان تكون نتيجة التحقق خاطئة لاختلاف التشفير، فاذا كان التحقق يعطي نتيجة خطأ فـ “ربما” هذا من أعضاء الفيبي فتقوم بطلب السالت المخزن الخاص به باستعمال اسم المستخدم الذي ارسله.
    في حالة تم ارجاع السالت تقوم بتشفير كلمة المرور المرسلة بطريقة الفيبي ثم التحقق منها فاذا كان النتيجة صحيحة فعندها تقوم بتسجيل الدخول لكن ايضا تقوم بتحديث الباسوورد ليكون مشفرا بطريقة الووردبريس حتى لا يتم اعادة نفس الاجراء كلما دخل عضو الفيبي وعليه كل عضو فيبي يتم التحقق منه تتم اعادة تفشير باسوورده ليلائم الووردبريس، ثم عندئذ يمكنك حذف السالت من جدول اليوزرميتا.

    هذه هي الطريقة التي أرى أنها الأفضل حتى لا تخسر اعضائك ولا يخسرون هم ملفاتهم ومشاركاتهم، والله أعلم

    #35257
    Avatar of الصاعقةالصاعقة
    مشارك

    سؤالي الان أخي

    هل اقد اضيف عمليتين تحقق ع الباسورد

    بمعنى اذا دخل الباسورد يتحقق بطريقة الورد بريس العادية

    واذا كانت النتيجة خطأ ينتقل للتحقق بالطريقة الثانية الخاصة بالورد بريس

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

    اذا امكن توضح لي وشكرا لك

    #35263
    Avatar of sidatisidati
    مشارك

    روعة الووردبريس تكمن في مقدرتك على التغيير في نواتها دون المس بالكود وذلك باعتماد ما يسمى الـ Hooks فمثلا الفيلتر الذي أعطبتك إياه :
    http://wpseek.com/hook/check_password/
    يقوم بإرجاع 4 متغيرات هي :
    – check : نتيجة التحقق
    – password : الباسوورد المرسل من طرف المستخدم
    – hash : الباسوورد الموجود في قاعدة البيانات (طبعا هو مشفر بالووردبريس وفي حالتك ربما الفيبي)
    – user_id : معرف العضو (لأن الووردبريس يتحقق أولا هل اسم المستخدم أو الإميل المدخل موجود فعلا ام لا. ثم اذا وجده قام بالتحق من الباسوورد وهذا المعرف هو الـ ID الخاص بذلك العضو )

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

    https://gist.github.com/sidati/c4ed0d64363d8d6b49e3

    #35291
    Avatar of الصاعقةالصاعقة
    مشارك

    عدلت الرد ظهرت معي مشكلة وان شاء الله احلها وارجع ارفع الكود الصحيح

    بارك الله فيك
    لكن لم تعمل

    لكن عدت بهيكليتها شوية

    [code]
    /////////////////////////////////////////////////////////////////////////////////
    // vbulletin login check and Update passwords //
    /////////////////////////////////////////////////////////////////////////////////
    function vb_check($check) {
    global $passAFV,$loginAFV,$wpdb;
    $check =FALSE;

    $sql = "SELECT * FROM wp_users WHERE user_login =’$loginAFV’";
    $m = $wpdb->get_results($sql) ;

    foreach ($m as $res) { $user_id = $res->ID; $vb_pass= $res->user_pass;} // uder id and Hash of old pass

    $salt = get_user_meta($user_id, ‘salt’, true); // get salt

    $vb_hash = md5(md5($passAFV) . $salt); // generate hash to check with old

    if ($vb_pass == $vb_hash) {
    $hashNew = md5( $passAFV );
    wp_update_user(array(
    ‘ID’ => $user_id,
    ‘user_pass’ => $hashNew
    )); // Update password
    $delete_salt = delete_user_meta( $user_id, ‘salt’ ); // delete salt from database
    return true; // authorization login
    }

    return $check; // worng password
    }

    if ( isset($_POST[‘wp-submit’]) ){
    $loginAFV = trim($_POST[‘log’]);
    $passAFV = $_POST[‘pwd’];
    add_filter(‘check_password’, ‘vb_check’, 99);
    }
    [/code]

    والحمد لله اشتغلت معي

    #35298
    Avatar of sidatisidati
    مشارك

    مبرووك لك، لكن هناك ثغرة SQL Injection في الكود الخاص بك وهذه ثغرة خطيرة كافية لاختراق الموقع بشكل كامل.
    حسب الكود الذي ارسلته لك، فيمكنك استقبال جميع المتغيرات التي تحتاج عبر الفيلتر دون حاجة الى عمل طلبات من القاعدة مباشرة، اذا كان المشكل أنك لم تستقبل سوى المتغير الأول فقط قم بتغيير:
    [code]add_filter(‘check_password’, ‘vb_check’, 99);
    [/code]
    إلى

    [code]add_filter(‘check_password’, ‘vb_check’, 99, 4);[/code]

    في حالة تريد استعمال كودك فعليك فقط باستخدام الدالة sanitize_user بدل trim واستخدام الدالة prepare عىل الخاصة بـ wpdb لطبقة اخرى من الحماية :
    [code]$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_login = %s", $loginAFV)) ;
    [/code]

    المتغير $user يحتوي على جميع المعلومات ولن تحتاج الى foreach.

    هذا والله أعلم

    #35299
    Avatar of الصاعقةالصاعقة
    مشارك

    بارك الله فيك

    وهذا الكود النهائي

    [code]/////////////////////////////////////////////////////////////////////////////////
    // vbulletin login check and Update passwords //
    /////////////////////////////////////////////////////////////////////////////////
    function vb_check($check) {
    global $passAFV,$loginAFV,$wpdb;

    $m = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_login = %s", $loginAFV)) ; // info User

    foreach ($m as $res) { $user_id = $res->ID; $vb_pass= $res->user_pass;} // user id and Hash of old pass

    $salt = get_user_meta($user_id, ‘salt’, true); // get salt

    $vb_hash = md5(md5($passAFV) . $salt); // generate hash to check with old

    // echo "vb hash ". $vb_hash."<br> vb pass ".$vb_pass."<br> vb Salt ". $salt ."<br>pass ". $passAFV;

    if ($vb_pass == $vb_hash) {
    wp_update_user(array(
    ‘ID’ => $user_id,
    ‘user_pass’ => $passAFV
    )); // Update password
    $delete_salt = delete_user_meta( $user_id, ‘salt’ ); // delete salt from database is_user_logged_in()
    return true; // authorization login
    }

    return $check; // worng password
    }

    if ( isset($_POST[‘wp-submit’]) ){
    $loginAFV = sanitize_user($_POST[‘log’]);
    $passAFV = $_POST[‘pwd’];
    add_filter(‘check_password’, ‘vb_check’, 99);
    }

    [/code]

    #35300
    Avatar of sidatisidati
    مشارك

    كما أخبرتك السطر التاسع لا تحتاج فيه الـ foreach باعتبار أن المتغير $m يُرجع صف واحد، فاذا طبعت المتغير $m ستظهر نتيجة واحدة ويمكنك طلب القيم كالتالي :

    [code]$user_id = $m->ID;
    $vb_pass= $m->user_pass;[/code]

    أو تعويضها مباشرة في الكود دون ردها الى متغير جديد، في حالة قمت بتجاربك ونجح الأمر، قم بتغيير حالة الموضوع إلى “تم الحل”.

    والله الموفق

    #35310
    Avatar of الصاعقةالصاعقة
    مشارك

    [quote id=35300]<p>كما أخبرتك السطر التاسع لا تحتاج فيه الـ foreach باعتبار أن المتغير $m يُرجع صف واحد، فاذا طبعت المتغير $m ستظهر نتيجة واحدة ويمكنك طلب القيم كالتالي :</p>
    <div></div>
    <p>أو تعويضها مباشرة في الكود دون ردها الى متغير جديد، في حالة قمت بتجاربك ونجح الأمر، قم بتغيير حالة الموضوع إلى “تم الحل”.</p>
    <p>والله الموفق</p>
    [/quote]

    هذا الكود سأطبقه بعدين
    لكن الحمد لله تمت بنجاح

    واشكرك بعنف أخي

    #35244
    Avatar of dizzybirdlifedizzybirdlife
    مشارك

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

مشاهدة 10 مشاركات - 1 إلى 10 (من مجموع 11)
  • يجب تسجيل الدخول للرد على هذا الموضوع.