Перейти к содержанию

Проблемы с хэшированием паролей в IPB 3.4.6


Рекомендуемые сообщения

Приветствую, читатель.

 

При регистрации в IPB используется следующий метод шифрования пароля:

md5 ( md5 ( $salt ) . md5 ( $password ) )

Однако при регистрации пользователя с паролем, в котором содержится символ "!" (т.е. восклицательный знак), зашифрованный пароль не соответствует данному алгоритму.

 

Случай 1.

Пользователь Test1 зарегистрировался с паролем qwerty и солью :l3>% (соль, очевидно, генерируется случайным образом без участия пользователя).

Вышеупомянутая формула дает результат 95be0395c5c598db50ab82d05ccad359.

В таблицу базы данных, хранящей хэши паролей, тоже записывается значение 95be0395c5c598db50ab82d05ccad359.

Проверка с использованием элементарнейшего php-кода подтверждает данный результат.

  $pass = 'qwerty';    
  $salt = ':l3>%';
  $cryptPass = md5( md5($salt) . md5( $pass ) );
  echo $cryptPass;

Случай 2.

Если пользователь Test2 регистрируется с паролем qwe!rty и солью a"J9T, в таблицу заносится значение 101c61df7c8cf10340f98534bbfa3d90.

Однако если мы проведем проверку, используя приведённый выше php-код, то мы получим другое значение - 5c4966345e8b631a1585d78750dadd34.

 

Понятное дело, что метод шифрования не меняется. Очевидно, что из передаваемой строки символ восклицательного знака или изымается, или заменяется на какой-либо другой.

Поэтому возникает вопрос: как с этим бороться?

 

Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Поэтому возникает вопрос: как с этим бороться?

А зачем вообще это нужно?

Очевидно, что из передаваемой строки символ восклицательного знака или изымается, или заменяется на какой-либо другой.

Второе.

Однако при регистрации пользователя с паролем, в котором содержится символ "!" (т.е. восклицательный знак), зашифрованный пароль не соответствует данному алгоритму.

Да и не только !. Если бы не заменялись некоторые символы, то это был бы не форум, а "дырка для кулцхакеров".

Ссылка на комментарий
Поделиться на другие сайты

А зачем вообще это нужно?

Второе.

Да и не только !. Если бы не заменялись некоторые символы, то это был бы не форум, а "дырка для кулцхакеров".

У меня есть небольшой игровой проект. Регистрация пользователей происходит на форуме. При входе в игру через игровой клиент происходит обращение к базе. Клиент проверяет пароль по упомянутой мною формуле. Однако если у пользователя в пароле есть восклицательный знак, то проверку пройти не удается.

 

В общем, хотелось узнать, какие еще символы заменяются в пароле на другие, и как это можно отключить.

Ссылка на комментарий
Поделиться на другие сайты


В общем, хотелось узнать, какие еще символы заменяются в пароле на другие, и как это можно отключить.
Не нужно это отключать.
$pass = IPSText::parseCleanValue('qwe!rty');    
$salt = 'a"J9T';
$cryptPass = md5( md5($salt) . md5( $pass ) );
Ссылка на комментарий
Поделиться на другие сайты

Не нужно это отключать.

$pass = IPSText::parseCleanValue('qwe!rty');    
$salt = 'a"J9T';
$cryptPass = md5( md5($salt) . md5( $pass ) );

Я благодарен Вам за ответы, но хотелось бы самому решать, что нужно, а что нет)

Полностью отдаю себе отчет в том, какими могут быть последствия экспериментов с безопасностью. Однако меня все же интересует решение проблемы именно тем способом, который я предложил.

Ссылка на комментарий
Поделиться на другие сайты

1. Находите класс IPSText

adminsourcesbasecore.php

2. Находите метод parseCleanValue
 


Однако меня все же интересует решение проблемы именно тем способом, который я предложил.
Я Вам дал решение, основанное на Вашем коде. Что в нем не так?
Ссылка на комментарий
Поделиться на другие сайты

 

1. Находите класс IPSText

adminsourcesbasecore.php

2. Находите метод parseCleanValue

 

 

 

Я Вам дал решение, основанное на Вашем коде. Что в нем не так?

 

Пардон, глазами недоучки не смог разглядеть ответа. Спасибо за пояснение, сегодня буду эксперементировать.

Ссылка на комментарий
Поделиться на другие сайты

Нашел строки, отвечающие за подмену символов при регистрации. Расположен этот отрывок в файле adminsourcesbasecore.php

        $val = str_replace( "&"                , "&"         , $val );
        $val = str_replace( "<!--"            , "&#60;&#33;--"  , $val );
        $val = str_replace( "-->"            , "--&#62;"       , $val );
        $val = str_ireplace( "<script"        , "&#60;script"   , $val );
        $val = str_replace( ">"                , "&gt;"          , $val );
        $val = str_replace( "<"                , "&lt;"          , $val );
        $val = str_replace( '"'                , "&quot;"        , $val );
        $val = str_replace( "n"            , "<br />"        , $val ); // Convert literal newlines
        $val = str_replace( "$"                , "&#036;"        , $val );
        $val = str_replace( "!"                , "&#33;"         , $val );
        $val = str_replace( "'"                , "&#39;"         , $val ); // IMPORTANT: It helps to increase sql query safety.

Символы, стоящие в кавычках, заменяются на собственное значение в Юникоде.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...