Jump to content

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

Featured Replies

Posted
comment_58398

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

 

При регистрации в 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.

 

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

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

 

Спасибо.

comment_58411

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

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

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

Второе.

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

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

  • Author
comment_58418

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

Второе.

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

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

 

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

comment_58424


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

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

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

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

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

comment_58427

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

adminsourcesbasecore.php

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


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

 

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

adminsourcesbasecore.php

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

 

 

 

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

 

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

  • Author
comment_58454

Нашел строки, отвечающие за подмену символов при регистрации. Расположен этот отрывок в файле 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.

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

Guest
This topic is now closed to further replies.

Последние посетители 0

  • No registered users viewing this page.