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]   

> Описание: Использование соли
Itan
Отправлено: 17 Августа, 2011 - 16:05:46
Post Id


Частый гость


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


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




Здравствуйте! Я немного не понимаю, как работает авторизация с куками.

Вот как я вижу: юзер зашел на сайт, залогинился. Если логин и хэш пароля совпадают с данными базы, то установить ему куку, а потом на всех сценариях писать session_start и проверять, совпадает ли хеш из куки с хешом в базе.

Только я не пойму какой кеш надо вписывать в куку и в базу для сравнения. Там нужна какая-то "соль" - её нужно отдельно хранить или генерировать после каждой успешной авторизации и перезаписывать в куку и в базу? И как это вообще работает? Объясните попроще, пожалста.
 
 Top
LIME
Отправлено: 17 Августа, 2011 - 16:16:50
Post Id


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


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


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




Itan пишет:
Вот как я вижу
ненадо видеть ))
тема избита до немогубольше
гугл
 
 Top
Itan
Отправлено: 17 Августа, 2011 - 16:24:40
Post Id


Частый гость


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


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




Да везде по-разному. У меня в одной книге вообще без соли, во второй непонятно. В инете искал, в одном примере постоянная строка хэшируется вместе с логином, во втором - генерируется каждый раз.
 
 Top
Itan
Отправлено: 18 Августа, 2011 - 07:23:24
Post Id


Частый гость


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


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




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

Например человек А залогинился на сайте. Ему в куки ушла строка случайного хэша; эта же строка ушла в базу, чтобы потом был "автологин".

Но если после авторизации человека А, с другого компьютера авторизуется человек Б, то хэш в базе будет перезаписан на новый и отправится ему в куки.

После этого челоек А при переходе на другую страницу автоматически кикается, т.к. у него не совпадает хеш в куках с хешом в базе.

Как можно решить эту проблему?
 
 Top
PATCH
Отправлено: 18 Августа, 2011 - 07:36:47
Post Id



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


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


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




а не проще ли хранить пароль зашифрованый? и при авторизации сравнивать вводимые поля по алгоритму шифрования?

(Отредактировано автором: 18 Августа, 2011 - 07:45:41)

 
 Top
illy
Отправлено: 18 Августа, 2011 - 09:00:51
Post Id



Участник


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


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




Чё вы мутите опять Ха-ха
Зарегился - добавил в базу логин+зашифрованный пароль
Залогинился - в куки добавился логин и зашифрованный пароль
Зашёл на страницу - проверка если логин и пароль из куков есть в базе то всё ок.
иначе попросить залогиниться


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Itan
Отправлено: 18 Августа, 2011 - 13:31:26
Post Id


Частый гость


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


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




Дак как-то не хочется передавать хэш пароля в куки. А такая схема как?:

Таблица в БД:
id | login | password | hash | string

Файл salt.php содержит какую-то определенную строку, сделанную заранее.

При регистрации юзера генерируем случайную строку и записываем в string.

Затем после успешной аутентификации подключаем salt.php и делаем хэш(string.salt). И записываем этот хэш в базу в столбец hash. И в куки отправляем хэш.

И на странице, где нужна проверка авторизации делаем так:
подключаем salt.php
берем из базы hash и string.

если хэш(string.salt) != хэшу из кук, то чистим куки и пересылаем юзера на форму логина, иначе показываем нужную инфу.

Как такая схема? Или бред параноика? Улыбка
 
 Top
White
Отправлено: 18 Августа, 2011 - 13:59:54
Post Id



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


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


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




Itan пишет:
Как такая схема? Или бред параноика?
ну и чего вы добились этим?
точно так же можно было бы генерировать случайную строку, и каждый раз записывать ее в базу и в куки, а потом сверять и перезаписывать.
Itan пишет:
а потом на всех сценариях писать session_start

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


-----
if(time()>1356048000) die();
 
 Top
Itan
Отправлено: 18 Августа, 2011 - 14:20:35
Post Id


Частый гость


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


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




Цитата:
генерировать случайную строку, и каждый раз записывать ее в базу и в куки


Не пойдет. А если 2 человека зайдут по одним логином с разных компьютеров? например, на корпоративную почту. У того, кто первый зашел сравнение строк из кук и базы будет давать false === кик. Так не надо.

Цитата:
не проще ли записать все данные о юзере в сессию


Разве сессии не закрываются после закрытия браузера? Мне нужно, чтобы человек мог находиться под своим логином только 15 минут, а потом ре-логин.
 
 Top
Itan
Отправлено: 18 Августа, 2011 - 18:05:35
Post Id


Частый гость


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


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




Во, я придумал как надо сделать!

Есть salt.php, который находится выше корня сайта. В нем строка.

Когда чел регается, то в базу идет его sha1(sha1(salt.password.salt))

При авторизации:
    очищаем введенный пасс и логин от мусора (на всякий случай)

    Хэшируем введенный пасс с солью: sha1(sha1(salt.password.salt))

    Сравниваем с базой


Если сравнение дает false, то доступ запрещен.
Если true, то:
    устанавливаем куки: ID юзера и Хэш пароля с солью

И чтобы снизить нагрузку на базу, устанавливаем сессию с Хэшем пароля из базы.

На каждой странице делаем проверку:
PHP:
скопировать код в буфер обмена
  1. If (установлена сессия) {
  2.         if (хэш из кук == содержимому сессии) (
  3.                 то продолжаем авторизацию, показываем *секретное* содержимое
  4.         } else {
  5.                 запрет на просмотр содержимого, переадресация на логин форму
  6.         }
  7. } else {
  8.         #Если сессия пустая
  9.         Подключаемся к базе, берем хэш пароля
  10.         Если хэш из куков совпадает с хэшом в базе, то
  11.                 устанавливаем сессию с хэшем пароля
  12. }


Как думаете, такая защита сойдет для аутентификации?
(Добавление)
Таким образом, если хакер взломает базу, то подставить хэш не сможет, потому что не знает, как он получился. (Правда, он может испортить мою базу, но это ругая тема.)

А от стыривания куков можно сделать привязку к IP - мне все равно нужна авторизация только на 15 минут.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« HTTP и PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB