С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/28: Рейтинг темы: голосов - 28, средняя оценка - 4.54
Особый статус
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,177
Записей в блоге: 1
1

Как безопаснее хранить данные о пользователе в бд?

24.10.2012, 20:27. Показов 5808. Ответов 53
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!
Я задумался - как безопаснее хранить данные о пользователе в бд. Варианта по-хорошему три
PHP
1
md5($salt.md5($pass))
или
PHP
1
md5($name.md5($salt.$pass))
или
PHP
1
md5($name.md5($pass))
Я подумал, что третий вариант - самый логичный. Ведь какая разница, мы добавляем в хеш соль или какую-то другую строку - при взломе бд она всё равно станет известна (да и какая разница, хеш всё равно не расшифровать), а генерация соли чуть-чуть но загружает сервер и занимает лишнее поле бд. Я прав? Или лучше всё же пользоваться солью а не именем юзера, и если да, то почему?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2012, 20:27
Ответы с готовыми решениями:

где безопаснее хранить пароли?
Приветствую. На данном этапе храню пароли в файле config.php. Задумался над базой mysql....

где хранить текст файлы? или как хранить данные?
Есть прога простенкая: берет инфу из текстфайла, редактирует и записывает обратно в тхт файл. Нужно...

Как перенести данные о пользователе на новую строчку
Доброго времени суток! Как сделать, чтобы данные о пользователе ( имя, почта и сообщение ) были...

Как передать данные о пользователе в веб-приложение
Добрый вечер. Столкнулся со след.задачей: на предприятии есть web-приложение(крутится на...

53
2 / 2 / 0
Регистрация: 19.10.2012
Сообщений: 15
24.10.2012, 21:25 2
Логин или что-то другое, уникальное, нужно хранить в чистом виде, иначе будет очень неудобно, а пароль можно например так md5($user.$password); или как угодно, главное, чтобы задействована была $password
2
Особый статус
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,177
Записей в блоге: 1
24.10.2012, 21:28  [ТС] 3
SharpNet, я понимаю, $name конечно же хранится не зашифрованным, просто я его хочу использовать при шифровании пароля...
0
2 / 2 / 0
Регистрация: 19.10.2012
Сообщений: 15
24.10.2012, 21:43 4
ну вообще-то
PHP
1
md5(md5($password));
зачастую и так хватает, ну а
PHP
1
md5(md5($login.$password));
это ещё кошерней, а ещё круче
PHP
1
md5(md5($login."ЛЮБОЕ_СЛОВО".$password));
"ЛЮБОЕ_СЛОВО" - замените например на "pass", просто тогда злоумышленники при бруте хэша пароля не смогут его сбрутить практически, т.к уйдёт огромнейшая масса времени, годы, столетия...
0
31 / 31 / 2
Регистрация: 06.08.2012
Сообщений: 155
24.10.2012, 21:59 5
PHP
1
2
3
4
5
6
7
function hash($pwd, $salt){
for( $k=0; $k <= 5; $k++){
$pass = md5(md5($pwd).md5($salt));
}
return $pass;
}
hash("пароль", "соль");
0
Особый статус
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,177
Записей в блоге: 1
24.10.2012, 22:11  [ТС] 6
spyeye, а в чём смысл цикла? На каждой итерации $pass будет одним и тем же.
0
31 / 31 / 2
Регистрация: 06.08.2012
Сообщений: 155
24.10.2012, 22:13 7
Цитата Сообщение от Proffessional Посмотреть сообщение
spyeye, а в чём смысл цикла? На каждой итерации $pass будет одним и тем же.
В том то и дело. Один и тот же хэш будет перехэширован 5 раз, что даст беспрецедентную защиту от брутфорса.
Что бы там не писали умники, сбрутить банальную комбинацию хэша можно за один вечер на домашнем ПК.
0
Особый статус
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,177
Записей в блоге: 1
24.10.2012, 22:18  [ТС] 8
М... Но мы здесь просто 5 раз делаем одно и то же и возвращаем в итоге последний из 5ти результатов итерации. То есть можно было просто написать
PHP
1
2
3
4
function hash($pwd, $salt){
$pass = md5(md5($pwd).md5($salt));
return $pass;
}
Или я что-то упустил?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.10.2012, 22:46 9
Да не нужно вообще десяток этих md5. Просто придумайте нормальную соль свою да подставляйте ее и все.. наподобие такого
PHP
1
2
$salt = '^@!_-@:-;*%!$#&~!-&@^-!%@$';
$pass = md5($salt.$password);
- через радужную таблицу уже по любому не подберут
1
31 / 31 / 2
Регистрация: 06.08.2012
Сообщений: 155
24.10.2012, 22:46 10
Доведите до ума функцию.. С мобильника мне немного неудобно) объявите переменную пасс до цикла и в цикле перехэшируйте.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
24.10.2012, 22:48 11
Цитата Сообщение от spyeye Посмотреть сообщение
Один и тот же хэш будет перехэширован 5 раз
и с чего Вы это взяли? хэш будет один и тот же, потому что сохраняется он не в переменной, которую вы передаете в функцию, а в локальной переменной, которую вы затем возвращаете
0
Особый статус
743 / 145 / 6
Регистрация: 16.07.2009
Сообщений: 2,177
Записей в блоге: 1
25.10.2012, 00:27  [ТС] 12
Мне кажется, всё же можно вместо соли добавлять имя...
0
270 / 226 / 11
Регистрация: 20.04.2012
Сообщений: 817
25.10.2012, 01:36 13
зачем вообще солить пароли? вы боитесь что БД уйдет в чужие руки?
0
2 / 2 / 0
Регистрация: 19.10.2012
Сообщений: 15
25.10.2012, 08:18 14
Цитата Сообщение от Василий Макогон Посмотреть сообщение
зачем вообще солить пароли? вы боитесь что БД уйдет в чужие руки?
Ну во-первых, это тупо не профессионально, а во-вторых да, боимся, мало ли
0
201 / 199 / 4
Регистрация: 13.06.2012
Сообщений: 1,009
Записей в блоге: 3
25.10.2012, 12:33 15
Proffessional, Никогда не делайте md5(md5 . Читайте книги !!!! Это не даст вам безопасности

хватает md5($pass.$salt); Если прям уже не имеется то так md5($salt1.$pass.$salt2); Соль должна тоже где то хранится идеальный вариант это на каждого пользователя своя соль. причем не вычисляемая а именно случайная.

Добавлено через 5 минут
Василий Макогон, лучше перестраховаться а так ну уйдет БД ну получет хакер мд5 ну получит соль ему еще решить надо как пароль солится. Я проект один делал там соль билась на пары символов и каждое четное место пароля вставлялись куски пары соли. Причем это было сделано как то не тривиально. Я этот кусок лично не правил. просто увидел удивился проверил что работает и все.
2
12 / 12 / 8
Регистрация: 20.05.2012
Сообщений: 120
25.11.2012, 02:36 16
Лично я генерирую соль и храню в базе
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function GenerateSalt($n=3)
{
    $key = '';
    $pattern = '1234567890abcdefghijklmnopqrstuvwxyz.,*_-=+';
    $counter = strlen($pattern)-1;
    for($i=0; $i<$n; $i++)
    {
        $key .= $pattern{rand(0,$counter)};
    }
    return $key;
}
 
    $salt = GenerateSalt();
    $hashed_password = md5(md5($password) . $salt);
    $query = "INSERT INTO `users` SET `login`='{$login}', `password`='{$hashed_password}', `salt`='{$salt}'";
0
Заблокирован
25.11.2012, 18:55 17
Я читал, что в данное время хранить пароли в виде MD5-хэша небезопасно. Используется совсем другая функция...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.11.2012, 18:58 18
с нормальной солью - вполне безопасно. А так, да, на офф сайте предлагают использовать crypt(), насколько я помню..
0
12 / 12 / 8
Регистрация: 20.05.2012
Сообщений: 120
25.11.2012, 19:09 19
А если усложнить задачу злоумышникам? Увеличить соль к примеру, это поможет?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.11.2012, 20:00 20
md5 возможно "раскусить" только с использованием так называемых "радужных таблиц" - т.е. таблицы куда уже забивали пароли. Если там используется соль, и не простая какая-то, а набор символов, и соль не известна - то подобрать нереально
0
25.11.2012, 20:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2012, 20:00
Помогаю со студенческими работами здесь

С# или VB.NET Как получить данные о текущем пользователе компьютера в сети
Сабж

Возможно ли хранить данные сkeditor в txt фаиле или это не правильно там их хранить?
В пред идущих темах я начал разбираясь с установкой этого чудесного редактора. У меня вопрос...

Как хранить данные данные в программе
Задался вопросом о том как хранить данные в программе ( кроме бд) . Знаю, что можно хранить в txt,...

Как хранить данные?
Всем привет! Есть набор свойств ( например возраст, пол и так далее) их около 20 - 30 будет Таких...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru