Меняющийся MD5

Фанат

oncle terrible
Команда форума
Ну вот что делать с дебилами, которые смотрят в книгу, а видят фигу? Ему написано, что есть ошибки, которые может найти только сам разработчик, на своем сервере, на своем коде, на своих данных. А он, как убогий на паперти, только и может: падаайте ашибку.
По моим наблюдениям он выдает из одного пароля два разных хеша каждый день.
ГДЕ. КОД. НАБЛЮДЕНИЙ?
где лог, который записан кодом наблюдений?
 

DiMA

php.spb.ru
Команда форума
Randell
да хоть трижды закрытый, просто адресок скажи, я сам войду .-)
 

vovanium

Новичок
Randell
Ну возьми пиши в лог-файл аргумент фунции md5 при несовпадении кэшей. Ты одного понять не можешь, что нет в md5 зависимости от даты, т.е. косяк в аргументе, а какой именно косяк ты найти не хочешь...
 

SiMM

Новичок
> SiMM аргумент постоянен...
Какие Ваши доказательства?
 

pilot911

Новичок
я спросил к тому, что многие md5 подбираются.. а если еще и логин известен из куки - то пиши пропало
 

Randell

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

Писал сюда уже в отчаяньи, что такая простая ерунда и так глючит.

DiMA а можно подробнее? если есть уязвимость, я с удовольствием ее изучу.

-~{}~ 31.03.09 13:11:

SiMM так своими же руками из файлика пасс копирую, за пробелами слежу.

pilot911 так пассы-то сложные все.

vovanium пасиб :) так и сделаю.
 

DiMA

php.spb.ru
Команда форума
хватит разводить сопли
пишешь в лог все вызовы md5(), указывая в логе: входной/выходной параметр, строку вызова функции, по желанию print_r($_REQUEST) + $_SESSION

потом воспроизводишь свой баг и думаешь
 

SiMM

Новичок
> SiMM так своими же руками из файлика пасс копирую, за пробелами слежу.
Не имеет значения - хотели бы разобраться - давно бы сделали то, что сказал DiMA.
Я бы, правда, ещё в шестнадцатеричном дампе входную строку записывал.
 

Фанат

oncle terrible
Команда форума
В лог записывать через print_r, а еще лучше - через var_dump c буфферингом.
сли есть уязвимость, я с удовольствием ее изучу.
про эту уязвимость на всех заборах написано.
нету в веб-строительстве более известной уязвимости, чем эта
 

Randell

Новичок
Если речь идет о прямой подстановке в запрос к БД данных из формы - то, разумеется, это не так, данные обрабатываются, я просто по максимуму упростил скрипт перед выкладыванием.
 

Димон

Новичок
Тыщу раз убеждался, что когда случаются такие "чудеса", значит где-то сидит тихушная бага в логике. Искать ее надо дебагером. Можно и ручками, но намного дольше.

Где прячутся чудеса?
1) Есть ли проверка пароля (сразу как вытаскивается из $_POST) регулярным выражением. Или хотя бы trim().
2) Мог ли в БД дважды попасть юзер с одинаковым логином. (Чтобы гарантированного от этого защититься используй ключ unique key на поле логин).
3) Корректно ли ставятся куки? Пишутся ли туда именно те данные, которые необходимы? Возможно на пути где-то стоит сессия, которую забыли обновить.
4) Если используешь аякс, то проверь правильно ли отправляются данные на сервер.
5) Если пользоваться дебагером западло, то просто внимательно просмотри свой скрипт. Проследи его логику.

Если чудеса не найдены.
1) Создай в БД табличку для отладки, куда пиши id юзера, его логин, оригинальный пароль, пароль после md5(), время записи. Независимо от того прошел он аутентификацию или нет. По этой табличке будешь искать логины с одинаковыми паролями. Скорее всего будут совпадения, т.к. юзеры ошибаются при вводе (а мы ведь фиксируем все), зато наглядно можно будет увидеть, что пихают в поле "пароль". Обрати внимание на непечатные символы (пробелы, табы, перевод строки). Не забудь удалить таблицу после того, как найдешь багу.

Итог.
1) Не пиши в куки открыто логин и пароль. Сериализуй массив и используй библиотеку шифрования mcrypt: http://ru.php.net/mcrypt
2) Не хешируй пароль по типу md5("my_pass"). Используй md5("my_pass" . "my_secret_word")
3) Обязательно используй регулярки для проверки ВСЕХ входных данных.
 

Randell

Новичок
Спасибо!) Только я сейчас в лог все подробности пишу.

Соль хотел использовать, руки пока не дошли усовершенствовать, все проверяю регулярными выражениями.
А с Mcrypt не знаком, посмотрю.

Куки и правда лучше не писать, можно просто писать в сессию подтверждение входа.
 

jonjonson

Охренеть
Randell, вы сами своими руками получали разные хэши или из логов берёте?
 

Randell

Новичок
jonjonson делал вывод хешей на экран при отказе принимать логин и пароль. Сейчас лог уже успешно пишется - да, это лучшее средство для понимания причины.
 

jonjonson

Охренеть
Нет. Меня интересует другое. Ты сам вводишь данные и поучаешь разный хэш, или это осуществляет пользователь. Врать бесполезно, так как обманишь себя.
 

Randell

Новичок
Я получаю разные хеши. Но ведь и пользователь вчера нормально заходил, а сегодня уже не смог - значит, причина одинакова.
 

antson

Новичок
Партнер клуба
убидиться, что ситуация не является аналогом описанной по ссылке http://ithappens.ru/story/288

проверить все места, где идет обновление хеша
в базе. Как вариант гдето глюк и затрагиваются
изменением более одной записи.
 
Сверху