Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2011, 21:50   #1
alt5000
PHP
Пользователь
 
Аватар для alt5000
 
Регистрация: 28.03.2007
Сообщений: 70
Восклицание Хранение паролей в БД + шифрование

Добрый вечер!

Дошел до необходимости хранения паролей пользователей. Понимаю, что шифровать их надо (можно через dsCrypt, можно через функцию и т.д.), но как хранить их в таблице? То есть просто пишем в соответствующее поле таблицы пользователей, а потом по вводимому имени извлекаем для сравнения? Или принято использовать какой-то более сложный механизм хранения? Просветите. И к тому же все скрипты хранятся в какой-то защищеной папке? Типа CGI?
alt5000 вне форума Ответить с цитированием
Старый 24.11.2011, 22:17   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Вкратце можно так: например в таблице храниться хэш пароля и логин (уникальное поле). Потом при авторизации пользователя, из пришедшего пароля получается хэш, делается выборка по пришедшему логину из таблицы и сравниваются хэши.
dr.Chas вне форума Ответить с цитированием
Старый 24.11.2011, 22:42   #3
alt5000
PHP
Пользователь
 
Аватар для alt5000
 
Регистрация: 28.03.2007
Сообщений: 70
Вопрос

Цитата:
Сообщение от dr.Chas Посмотреть сообщение
Вкратце можно так: например в таблице храниться хэш пароля и логин (уникальное поле). Потом при авторизации пользователя, из пришедшего пароля получается хэш, делается выборка по пришедшему логину из таблицы и сравниваются хэши.
Понятно, спасибо. Вы мне не поможете еще с одним моментом? Я заметил, что в сценарии устанавливаются переменные - хост, имя и пароль для подключения к базе. Они действительно хранятся прямо в открытом виде в коде? Ведь это прямая угроза. Каким образом правильно хранить параметры подключения к БД?
alt5000 вне форума Ответить с цитированием
Старый 24.11.2011, 22:59   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от alt5000 Посмотреть сообщение
Я заметил, что в сценарии устанавливаются переменные - хост, имя и пароль для подключения к базе. Они действительно хранятся прямо в открытом виде в коде? Ведь это прямая угроза.
Это не опасно, если данные находятся в php-файлах, а не в каких-нибудь .conf, .ini, .txt и т.п.
Andkorol вне форума Ответить с цитированием
Старый 25.11.2011, 06:55   #5
alt5000
PHP
Пользователь
 
Аватар для alt5000
 
Регистрация: 28.03.2007
Сообщений: 70
Радость

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Это не опасно, если данные находятся в php-файлах, а не в каких-нибудь .conf, .ini, .txt и т.п.
Ясно. Я просто думал, что их скачать с сервера могут. А раз нет - так и сделаем Чтож, спасибо за ответы - Вы мне очень помогли.
alt5000 вне форума Ответить с цитированием
Старый 25.11.2011, 11:43   #6
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Цитата:
Я просто думал, что их скачать с сервера могут.
Не могут. С PHP файлами работает веб-сервер. Он их обрабатывает и возвращает браузеру результат в виде HTML страницы.

А про "шифрования", как сказали ранее, используйте хеширование пароля (например, алгоритм хеширования md5) и храните в базе хэш пароля. Таким образом, если злоумышленник получит доступ к базе (например, через SQL инъекцию) и получит хэши паролей, то с ними он, грубо говоря, ничего не сможет сделать, потому что функция md5() в php устроена так, что одному сгенерированному значению может соответствовать множество начальных значений.

Код:
$pwd = "MyPassword";
$pwd = md5($pwd);
Теперь в pwd будет храниться какое-то значение, типа: 48503dfd58720bd5ff35c102065a52d7. Сохраняешь его в базу. При попытке залогинниться, достаешь это значение из базы, записываешь в какую-то переменную ($pwdHash) и сравниваешь с хэшем пароля, который пытается ввести пользователь при авторизации ($password)

Код:
if (md5($password) = $pwdHash)
{
   // Если пользователь ввел правильный пароль
}
else
{
   // Если ввел неверный пароль
}
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 25.11.2011, 12:16   #7
alt5000
PHP
Пользователь
 
Аватар для alt5000
 
Регистрация: 28.03.2007
Сообщений: 70
По умолчанию

Спасибо. Да, я уже "нарыл" про необратимое шифрование (md5). Теперь понимаю почему на сайтах создают новый пароль, а не возвращают старый
alt5000 вне форума Ответить с цитированием
Старый 25.11.2011, 16:54   #8
gephaest
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 14
По умолчанию

Не рекомендуется использовать "голый" md5, на данный момент существует куча баз для расшифровки+проблема коллизий.
Я предпочитаю
Код:
md5(md5($pass) . $salt ))
http://ru.wikipedia.org/wiki/%D0%A1%...D0%B8%D1%8F%29
gephaest вне форума Ответить с цитированием
Старый 26.11.2011, 11:08   #9
alt5000
PHP
Пользователь
 
Аватар для alt5000
 
Регистрация: 28.03.2007
Сообщений: 70
По умолчанию

Да, только опять же проблема в хранении соли. Если она будет уникальной длч каждого user_id, ее надо будет хранить с этим юзером, и, если она будет в незашифрованном виде в одной строке с user_id, то только очень глупый человек не догадается что к чему.
alt5000 вне форума Ответить с цитированием
Старый 26.11.2011, 12:10   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от alt5000 Посмотреть сообщение
Да, только опять же проблема в хранении соли. Если она будет уникальной длч каждого user_id, ее надо будет хранить с этим юзером, и, если она будет в незашифрованном виде в одной строке с user_id, то только очень глупый человек не догадается что к чему.
Вы просто не понимаете конечной цели использования salt.
Советую внимательно прочитать статью по ссылке выше:
Цитата:
Основное назначение соли — защита от нахождения пароля методом перебора используя заранее подготовленные таблицы (радужные таблицы). Так как соль по сути является "удлинителем" пароля, построение радужных таблиц для подбора такой строки требует слишком много ресурсов.
И тут уже не важно, зашифрована salt или нет.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифрование паролей varvar123 Общие вопросы Delphi 3 30.05.2011 11:37
генератор паролей Shuster Общие вопросы C/C++ 5 29.11.2010 11:30
Программа Хранение паролей в Delphi ChEaTeR-abc Помощь студентам 19 07.07.2010 08:35
Хранение и шифрование данных Paul Hindenburg БД в Delphi 1 20.08.2007 09:04
генерация паролей ozhjog Общие вопросы Delphi 3 02.07.2007 08:20