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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Hapson
Отправлено: 30 Июля, 2013 - 01:08:41
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


Ниже я может где-то ляпну глупость - я не особо разобрался еще во всех этих методах шифрования.
Имеет ли смысл шифровать пароль к примеру так:
PHP:
скопировать код в буфер обмена
  1. $start = microtime(1);
  2.  
  3. $user_pass = "megapassword";
  4. $salt = hash("sha512", $_SERVER['REMOTE_ADDR']);//соль -> в БД
  5. $result = "";
  6. for($i = 0; $i < 10000; $i++){
  7.         $result = hash("sha512", $user_pass . $salt . $result);
  8. }
  9. $result = md5($salt . substr($result, 32, 32));//пароль -> в БД
  10.  
  11. $clock = microtime(1) - $start ."<br>";
  12. //0.28 - 0.3 sec


Дальше вопрос по кукам.
Что если и имя и значение куки тоже будут какими-то вот такими хешами? В куки уже хешировать какие-то поля из БД.

Теперь сессии. На основе чего генерируется id сессии? Можно же ведь вместо имени сессии записывать такой хеш? Ну и значение тоже хеш чего-то там... юзер агент, ip (любые значения, за которыми не нужно лазить в БД)

Ну и самое главное - везде ли поддерживается sha512?
(Добавление)
PS
Ну к примеру вот так (образно)
PHP:
скопировать код в буфер обмена
  1. session_name(hash("sha512", $_SERVER['REMOTE_ADDR']));
  2. session_id(hash("sha512", $_SERVER['HTTP_USER_AGENT']));

(Добавление)
PPS
ну и плюс в саму сессию будет записываться хеш каких-то данных, которые есть в сессии.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 30 Июля, 2013 - 01:31:01
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




смысл шифровать пароль есть в БД чтобы потом сравнивать при авторизации

Цитата:
Теперь сессии. На основе чего генерируется id сессии? Можно же ведь вместо имени сессии записывать такой хеш?


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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 30 Июля, 2013 - 01:59:36
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


caballero пишет:
смысл шифровать пароль есть в БД чтобы потом сравнивать при авторизации

Я имею ввиду при регистрации нового пользователя, его пароль шифровать как-то так.
caballero пишет:
а зачем в это вообще лезть? как работает сессия не имеет значения - вы можете зранить там что угодно включая пароли

Многие пишут, что украв куку сессии можно как-то что-то нехорошее наделать. В общих чертах - сессии не совершенны. Это не мое мнение. Ну да ладно, пусть будет PHPSESSID, но парочка хешей там не помешает.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Vaio
Отправлено: 30 Июля, 2013 - 09:10:50
Post Id


Гость


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


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




http://php.net/manual/ru/faq.passwords.php

Hapson пишет:
Многие пишут, что украв куку сессии можно как-то что-то нехорошее наделать. В общих чертах - сессии не совершенны.

Украв куку сессии, он не сможет увидеть ни содержание сессии ни изменить ее.

Можешь еще добавить какие-то дополнительные хэши в сессию/куку и затем сверять их.
 
 Top
Hapson
Отправлено: 30 Июля, 2013 - 17:07:29
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


Vaio пишет:
http://php.net/manual/ru/faq.passwords.php

Hapson пишет:
Многие пишут, что украв куку сессии можно как-то что-то нехорошее наделать. В общих чертах - сессии не совершенны.

Украв куку сессии, он не сможет увидеть ни содержание сессии ни изменить ее.

Можешь еще добавить какие-то дополнительные хэши в сессию/куку и затем сверять их.

Понятно, мануал я читал.
Я так понял, что нет смысла извращаться с шифрованием, но и ограничиваться однократным md5 без соли тоже нельзя.
Уникальная соль пользователя хранится всегда рядом с паролем, так как нет смысла ее скрывать, если она действительно для каждого уникальна. Методы шифрования в алгоритме тоже по большому счету не имеют значения. Если алгоритм украден, то все.
То есть не важно, прогнал я пароль 5 раз через md5 или по разу через разные методы. Пусть я даже несколько раз порезал и склеил разные хеши и еще раз все захешировал - плевать.
Я так понял, важно время выполнения хеширования. Пусть это даже будет прогон через md5 100000раз. Потом по словарю проверять будет уже долго.
Из этого я делаю вывод, что нужно увеличить время хеширования, что немного увеличит безопасность, даже если украли алгоритм.

Вопрос: какое время оптимально для шифрования. Выше я привел пример, который выполняется примерно 0,3 сек. Но на время влияет и железо, так ведь? У меня на ноуте 1.6 ГГц.

И еще, немного я непонял про crypt(). Вроде как механизм шифрования имеет зависимость от системы. То есть при переносе сайта алгоритм может просто отказаться работать или будет работать не так и все хеши можно будет выбросить.

А что насчет hash(). К примеру если я буду использовать hash() и sha512, на всех ли системах это будет работать.

Но самое главное, каково оптимальное время шифрования. Можно ведь и на md5 запустить цикл.А в цикле можно много чего делать со строкой. В последствии взломщик для подбора будет вынужден использовать именно мой - долгий алгоритм.

PS
Конечно же, это не главное. Главное то, нужен ли кому-то мой сайт. Если нужен очень, то поломают. Вопрос в том, как максимально затруднить процесс, чтобы не ломали все кому не лень.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 30 Июля, 2013 - 17:49:21
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




если доступа к Бд нет то достаточно простого MD5
а если есть то никакое шифрование не поможет.

не заморачиватесь с проблемами которых нет


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 30 Июля, 2013 - 18:08:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


caballero пишет:
если доступа к Бд нет то достаточно простого MD5
а если есть то никакое шифрование не поможет.

не заморачиватесь с проблемами которых нет

Я тоже так думаю. Но вопрос в том, стоит ли повышать время шифрования. Усложнится ли задача взломщика, если у него есть БД, хеши, соли и мой алгоритм. То есть он будет делать банальный перебор. Но перебор будет долгим за счет алгоритма. Вот мне и интересно, как долго нужно шифровать - 0.3, 0.5, 1... сек


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
caballero
Отправлено: 30 Июля, 2013 - 18:12:08
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




Цитата:
Усложнится ли задача взломщика, если у него есть БД, хеши, соли и мой алгоритм. То есть он будет делать банальный перебор

никто не будет взламывать шифр перебором

а если подбирают входной пароль то тут никаке шифроание не поможет - система не отличит взломщика от хозяина

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

(Отредактировано автором: 30 Июля, 2013 - 18:12:33)



-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Hapson
Отправлено: 30 Июля, 2013 - 18:32:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


caballero пишет:
в любом случае способ шифровния всегда можно поменять

Кстати...
К примеру я использую md5($pass) - уже есть 100 пользователей в БД. И тут я решил использовать hash("sha512", $pass) - как проверять те хеши, которые генерировал md5?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
makar3000
Отправлено: 30 Июля, 2013 - 18:50:52
Post Id



Гость


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


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

[+]


Hapson В форме авторизации после $_POST используете:

PHP:
скопировать код в буфер обмена
  1. $err = '';
  2. $login = $_POST['login']; // + Проверки на sql инджект
  3. $pass = $_POST['passw'];
  4.  
  5. $result = mysql_query('select * from `users` where `login`="'.$login.'"');
  6. $result = mysql_fetch_array($result);
  7.  
  8. if(preg_match('/^[a-f0-9]{32}$/', $result['passw']))
  9.     if(md5($pass) !== $result['passw']) $err = 'Неверный пароль';
  10. else
  11.     if(hash("sha512", $pass) !== $result['passw']) $err = 'Неверный пароль';
  12.  
  13. if(!$err) {
  14.     // Если пароли верны
  15. } else echo $err;

(Отредактировано автором: 30 Июля, 2013 - 18:51:29)

 
 Top
Hapson
Отправлено: 30 Июля, 2013 - 18:59:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


makar3000
Ну это понятно - двойная проверка. Я имею ввиду, что я буду вынужден после смены алгоритма юзать двойную проверку. И после смены я смогу лишь попросить пользователей сменить пароли. А если я к примеру буду вырезать из sha512 32 символа и их писать в БД, то я даже не узнаю, где хеш md5, а где sha512.

Вот поэтому я и хочу сейчас определить метод хеширования.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
makar3000
Отправлено: 30 Июля, 2013 - 19:04:00
Post Id



Гость


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


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

[+]


Могли бы сделать так что бы при вводе старого пароля в md5, выводилась форма смены пароля, а там уже обновляли базу загоняя в нее новый пасс.

Да и не могу понять зачем оно вам? md5 не расшифровывается, ну только в тех случаях если пароли: 123456, 123321, qwerty
 
 Top
Hapson
Отправлено: 30 Июля, 2013 - 19:10:03
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


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

[+]


makar3000 пишет:
Да и не могу понять зачем оно вам? md5 не расшифровывается, ну только в тех случаях если пароли: 123456, 123321, qwerty

Ну да)))
Ладно, но главное-то: hash("sha512", $pass) - будет работать на всех системах?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
makar3000
Отправлено: 30 Июля, 2013 - 19:12:50
Post Id



Гость


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


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

[+]


Hapson Всмысле на всех? На всех версиях php?
(Добавление)
PHP 5 >= 5.1.2,
 
 Top
teddy
Отправлено: 30 Июля, 2013 - 19:21:57
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


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




.

(Отредактировано автором: 30 Июля, 2013 - 19:47:18)

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB