Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Система авторизации на сайте

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
froosty
Отправлено: 24 Февраля, 2012 - 00:08:20
Post Id


Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Февр. 2012  
Откуда: Донецк, Украина


Помог: 0 раз(а)




Доброго времени суток. Возник такой вопрос. Раньше, когда делал система авторизации на сайте, то в куках хранил логин и md5 шифрованный пароль. А когда надо было проверить авторизирован ли пользователь то просто брал из кук логин и зашифрованный пароль и проверял, есть ли в БД такая пара (в БД естественно тоже пароль в зашифрованном виде). Запрос получался простой, типа SELECT COUNT(*) FROM users WHERE login = '$login' AND password = 'password'.

Но в последнем проекте встал вопрос безопастности. Хранить в таком виде небезопастно. Первое, что приходит в голову, это в куках хранить md5 ($login + $password). Но встаёт вопрос - какой тогда запрос к БД писать?

Или, может кто посоветует другой способ (в плане того, что в куках хранить)?

Зараннее спасибо за помощь=)
 
 Top
sKaa
Отправлено: 24 Февраля, 2012 - 00:56:06
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


froosty, каждый раз когда кто-то из участников форума задает глупый вопрос при этом так невзначай вставляет пару слов о серьезном проекте, безопасности итд меня этот проект почему-то сразу пугает )))
Если ты собираешь хранить md5(login + password) то почему вообще запрос должен измениться? Если ты думаешь, что ты так сильно обезопасишь своим md5 от человека который сможет дернуть чужую куку ради дела, то что-то мне подсказывает, что его алгоритм расшифровки твоего md5 на выходе сделает сразу 2 дела :
1) - Выдаст ему логин
2) - Выдаст ему пароль.
Это очень оригинальное решение по-скольку ему не надо будет дергать одну лишнюю куку с логином. ))
 
 Top
DelphinPRO
Отправлено: 24 Февраля, 2012 - 01:03:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




поля таблицы LOGIN, PASSWORD, SALT

LOGIN = Логин пользователя
PASSWORD = md5( $password . $salt )
SALT = $salt

Соль рандомно генерится при регистрации.

в куках храним md5( $password . $salt )
Запрос к базе остается таким же простым.
SELECT COUNT(*) FROM users WHERE login='$login' AND password='$password'

При авторизации посложнее. На входе имеем Логин и чистый пароль.
Первым запросом выдергиваем соль для указанного логина.
$salt = SELECT salt FROM users WHERE login = '$login'
Потом проверяем наличие пользователя
SELECT COUNT(*) FROM users WHERE login='$login' AND password='md5($password.$salt)'

Получается в куках храним хеш от случайного набора символов, вместо пароля. А соль известна только нам.
(Добавление)
Алгоритм хеширования пароля можно усложнять до бесконечности, но самым слабым звеном в этой цепочке безопасности всегда будет пользователь. Поэтому если конфеденциальность крайне важна - НИЧЕГО не храните в куках у пользователя. ;)


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
sKaa
Отправлено: 24 Февраля, 2012 - 01:48:19
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Всю эту соль я бы заменил на этот метод

PHP:
скопировать код в буфер обмена
  1. public function hash($str){
  2.     for($k=0;$k<10;$k++)
  3.       $str = md5($str);
  4.     return $str;
  5. }
 
 Top
DelphinPRO
Отправлено: 24 Февраля, 2012 - 02:50:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




sKaa вы имеете ввиду генерацию соли или что?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
sKaa
Отправлено: 24 Февраля, 2012 - 03:01:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


DelphinPRO, соль можно сунуть и в константу PHP. Смысл хранить её в базе? Чтобы она просто была уникальная?

Тут на форуме был один тип "Белый тигр", он работает в какой-то конторе которая как-раз и устраняет уязвимости, так вот он писал статьи на тему обеспечения безопасности приложений, вебинар даже какой-то был. Много всего писал, как лучше апач настроить, как пхп, вообще много чего интересного. Так вот там мельком проскакивал вопрос хэширования паролей. Он объяснял, что даже если хакер дернет куку которая N раз была хэширована md5/sha1, то ему потребуются серьезные финансовые вложения, чтобы вычислить алгоритм и узнать пароль.
 
 Top
DelphinPRO
Отправлено: 24 Февраля, 2012 - 03:11:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




насчет трудности взлома даже двойного хеша согласен. А соль хранится в базе, потому что генерится уникальная для каждого пользователя, что еще более повышает взломоустойчивость хеша Улыбка . Аналогичный подход используется в CMS Joomla
(Добавление)
sKaa пишет:
чтобы вычислить алгоритм
а если код открыт? алгоритм известен.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
sKaa
Отправлено: 24 Февраля, 2012 - 04:42:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


DelphinPRO, а если код открыт константу задавать в конфиге
 
 Top
DelphinPRO
Отправлено: 24 Февраля, 2012 - 04:57:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




sKaa
регистрируем аккаунт, имеем соленый хеш.
алгоритм шифрования знаем, пароль знаем (сами регили).
быстренько брутим и вычисляем соль.

Теперь знаем соль (общую для всех), алгоритм, и нам удалось спереть чужую куку.
Сбрутить пароль с такой информацией - дело техники (хорошей, мощной вычислительной техники Улыбка )


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
sKaa
Отправлено: 24 Февраля, 2012 - 05:06:46
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Да мне пофигу на самом деле на эту соль. Всё, что я хотел высказать -
sKaa пишет:
каждый раз когда кто-то из участников форума задает глупый вопрос при этом так невзначай вставляет пару слов о серьезном проекте, безопасности итд меня этот проект почему-то сразу пугает
 
 Top
froosty
Отправлено: 24 Февраля, 2012 - 10:43:13
Post Id


Новичок


Покинул форум
Сообщений всего: 39
Дата рег-ции: Февр. 2012  
Откуда: Донецк, Украина


Помог: 0 раз(а)




DelphinPRO, спасибо, большое.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB