سلام ، آیا این بازدید اول شماست ؟ یا
نمایش نتایج: از شماره 1 تا 7 , از مجموع 7

موضوع: تغییر مقادیر فیلد Password با دستور SQL

  1. #1

    تاریخ عضویت
    Aug 2012
    محل سکونت
    گیلان - رشت
    نوشته ها
    100
    تشکر
    4
    تشکر شده 13 بار در 12 ارسال

    تغییر مقادیر فیلد Password با دستور SQL

    با سلام...

    من با استفاده از دستور SQL زیر مقدار فیلد username رو از مثلاً a1 ، a2 ، a3 و... به b1 ، b2 ، b3 و ... به راحتی تغییر دادم :
    کد:
    update `jos_users`
    set `username` = replace(`username`,"a","b");
    اما حالا میخوام مقدار فیلد password رو هم تغییر بدم ولی همونطور که میدونید مقادیر این فیلد Encrypt شده هستش! و مقدار a به صورت کد شده در این فیلد ذخیره میشه و نمیشه گفت هرجا a بود به b تبدیل کن!
    آیا راهی هست که مشکلم حل شه!؟
    ویرایش توسط Pr0grammer : 10-18-2012 در ساعت 07:31 PM

    جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.


  2. # ADS
    تبلیغات در جوملا فارسی
    تاریخ عضویت
    Always
    محل سکونت
    Advertising world
    نوشته ها
    Many
     

  3. #2

    تاریخ عضویت
    Apr 2007
    نوشته ها
    70
    تشکر
    0
    تشکر شده 38 بار در 32 ارسال
    سخت نباید باشه... اینو ببین :

    کد:
    UPDATE `jos_users` SET `password` = MD5( 'b' ) WHERE `jos_users`.`password` = MD5( 'a' )
    فک کنم کار می کنه...

    جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.


  4. #3

    تاریخ عضویت
    Aug 2012
    محل سکونت
    گیلان - رشت
    نوشته ها
    100
    تشکر
    4
    تشکر شده 13 بار در 12 ارسال
    مرسی، اما متاسفانه نشد!
    حتی کد زیر رو هم امتحان کردم، نشد :
    کد:
    UPDATE `jos_users` SET `password` = replace(`password`, MD5('a'), MD5('b'))

    جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.


  5. #4

    تاریخ عضویت
    Apr 2007
    نوشته ها
    70
    تشکر
    0
    تشکر شده 38 بار در 32 ارسال
    کار می کنه فقط جای اون تک کتیشن، دَبل بزن حله...

    کد:
    UPDATE `jos_users` SET `password` = MD5(  "secret" ) WHERE `jos_users`.`password` = MD5(  "admin" )  ;

    جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.


  6. #5

    تاریخ عضویت
    Aug 2012
    محل سکونت
    گیلان - رشت
    نوشته ها
    100
    تشکر
    4
    تشکر شده 13 بار در 12 ارسال
    کد:
    0 row(s) affected. ( Query took 0.0091 sec )

    جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.


  7. #6

    تاریخ عضویت
    Apr 2007
    نوشته ها
    70
    تشکر
    0
    تشکر شده 38 بار در 32 ارسال
    خوب اینکه نمی شه علتش اینه که پسورد ها قبل از اینکه با متد MD5 بخوان Hash بشن و توی بانک نوشته بشن، اول با یه رشتهء رندم دیگه Salt می شن(یعنی نمکشون زیاد می شه اصتلاحا)، که اون رشته رندم با استفاده از همون فیلد معروف secret فایل configuration.php تولید می شه.
    مثلا :
    کد:
    var $secret = 'tiDvqWRGWhlKLNHR';

    حالا کلا یعنی، پسوردی که الان تو بانک ذخیره شده، برای مثال :
    کد:
    Username: user
    Password: pass
    به این صورت ِ :
    کد:
    username = user
    password = ea92823e6a5118fde6068c343fefc292:WTiMBzsVhCMvZbnZbUqfWaVA3AZ5YzER
    که اینطوری درست شده :

    جوملا یه رشته 32 بیتی رندم درست کرده که اینه تو این مثال :

    کد:
    salt = WTiMBzsVhCMvZbnZbUqfWaVA3AZ5YzER
    که همون مقدار salt هست.
    حالا پسورد رو که pass باشه به این صورت hash می کنه و بعدم مثل اون بالا که گفتم، یه ':' رو هم به عنوان فیلد جدا کننده استفاده می کنه و اون رشتهء رندم رو هم بهش اضافه می کنه. که می شه :

    کد:
    password = MD5(passWTiMBzsVhCMvZbnZbUqfWaVA3AZ5YzER) + ':' + WTiMBzsVhCMvZbnZbUqfWaVA3AZ5YzER
    حالا چطور می شه این پسورد encrypt شده رو decrypt کرد؟
    جوابش هم ساده است، اصلا نمی شه.
    خود جوملا وقتی می خواد ببینه یه یوزر و پسورد مچ هست یا نه، از روی فیلد یوزر، مقدار salt رو پیدا می کنه و پسورد وارد شده رو دوباره hash می کنه و چک می کنه که با بخش اول فیلد پسورد مچ باشه.

    خلاصه، نمی تونی با یه کوئری با شرط چک کردن مقدار فیلد پسورد کاری از پیش ببری...

    جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.


  8. کاربر مقابل از samir عزیز به خاطر این پست مفید تشکر کرده است:


  9. #7

    تاریخ عضویت
    Apr 2007
    نوشته ها
    70
    تشکر
    0
    تشکر شده 38 بار در 32 ارسال
    خوب اون بخش آخر که کاری نمی شه کرد ،اشتباه بود...
    اینو یه امتحانی بکن :
    کد:
    SELECT * FROM `jos_users` WHERE 
    Substring_index( `jos_users`.`password` , ':', 1 ) = 
    MD5( CONCAT( 'PASSWORD' , Substring_Index( `jos_users`.`password`,':', -1)));

    که باید جای مقدار PASSWORD همون پسورد خودت رو بزنی، این کوئری سطرهایی که مقدار پسوردشون برابر PASSWORD هست رو برمی گردونه...

    حالا که این کار می کنه؛ پس اینم دیگه کار می کنه :


    کد:
    UPDATE `jos_users` SET `password` = MD5(  "NEW_PASSWORD" )
    WHERE 
    Substring_index( `jos_users`.`password` , ':', 1 ) = 
    MD5( CONCAT( 'OLD_PASSWORD' , Substring_Index( `jos_users`.`password`,':', -1)));


    فقط یکم مسئله امنیتی داره این کار، اونم اینه که رشته جدید پسورد دیگه salt نشده توی بانک ذخیره می شه... یعنی انگار که مقدار رشته salt الان NULL هست...

    جهت مشاهده لینک ها باید ثبت نام کنید یا لاگین کنید.


  10. کاربر مقابل از samir عزیز به خاطر این پست مفید تشکر کرده است:


موضوعات مشابه

  1. عدم ورود به بخشه مدیریت با وارد کردنه userو password
    توسط pj در انجمن مدیریت مامبو فارسی
    پاسخ ها: 11
    آخرين نوشته: 10-15-2007, 07:54 AM

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •