title
Description
Body
вобщем меня давно интересует такой вопрос , есть пароль я зашифровал его в md5 потом еще в base64
но если украсть этот хеш то с ним можно зайти спокойно на сайт под чужим паролем
помогите пожалуйста как сделать такую авторизацию правильно и безопасно чтобы при �раже хеша не смогли авторизоваться под чужим паролем?
Отредактировано nord (2011.02.19 18:36)
Неактивен
DarkDaNTe написал:
$pass = md5($_POST['pass']);
А дальше setcookie
И что это будет?
Если я правильно понял ты хочешь записать хеш пароля в куку а потом сравнивать с хешом в базе?
Ни вкоем случае так не делай.
Смысл тогда его хешироват? А нету
Так как если солют базу, ни каким образом нельзя дать доступ к учетке через хеш.
А так просто стоит себе в куку вставить хеш и впирет доступ открыт.
А хотя я думаю если смогут базу слить то и получить доступы не составит труда
Отредактировано TLENS (2011.02.20 16:25)
Неактивен
Gemorroj написал:
вообще, не нужно хранить в куках пароль. там нужно хранить идентификатор сессии. а в самой сессии уже все данные.
да да оно самое а как это правильно сделать можно поподробнее пожалуйста?
Неактивен
Ну можно создать таблицу в её писать id юза и какой нибудь хеш ну и браузер хеш отправить в куку а и после простоя сесии сравнить хеш браузер ну и еще какие то данные это на сколько фантазии хватит и если все сходится авторизовуем ну и меняем хеш.
Добавлено спустя 3 минуты 20 секунд:
Ну я думаю надо по любому и себе делать авто авторизацию а то часто бывало пишу какое то сообщение мучаюсь тут жму отправить а оно мне вы не авторизованы. Жмем назад а кеширование понятно отключено
Неактивен
если делать с помощю сесии то авторизация не будет слетать?
Неактивен
Или же место на сервере закончилось! Я у себя в подержку написал о переполнении дык сказали сделаем. Неделю где-то папка сессии растет:-) круто, да?
Я, допустим, делал так: в таблицу юзеров пишу случайный хэш, его же и в сессию + проверка по ip.
Неактивен
Я вообще не понимаю что к чему тут, но хочу разобраться
- С чего вообще ты это взял?
- Ну вот:
.promodj.ru TRUE / FALSE 1333806479 pdjsid 452ddpcej5vf83q7i4e6fueng0
.promodj.ru TRUE / FALSE 1643749200 maxi 1181816
.promodj.ru TRUE / FALSE 1643749200 jazz %7E355400e24b65b0f2fb3e9ee92f3e2073
.promodj.ru TRUE / FALSE 1643749200 trickme 5b7550ddc1c6c97a87b80339e748da81
promodj.ru FALSE / FALSE 1304948878 fatboy AAAAAU2fEg4sc3Lqc89QAg==
Последняя кажется всегда постоянна...
|
|
Отредактировано tipsun (2011.04.09 20:02)
Неактивен
http://php.net/session_start ответы всегда в мануале.
bool session_start ( void )
Неактивен
Это кто там такую фигню в посте #25 пишет??!
void - пусто. Понял)) СПС.
|
|
Отредактировано tipsun (2011.04.09 20:59)
Неактивен
Вот я не пойму, зачем в куки все суют браузеры, ипы... Он же на отдельном компе каждого хранится.
----
Узнал, как можно продлить жизнь файла сессии, просто создать для него отдельную папку и если можно там, где нет доступа.
|
|
Базу не трогать, т.к. все равно с файла вытащить это все быстрее будет, как я понял.
Отредактировано tipsun (2011.04.10 09:46)
Неактивен
что за дибилизм, трудно в мануал заглянуть?
http://www.php.net/manual/en/session.co … axlifetime
а save_path только меняет папку для хранения сессий.
Добавлено спустя 1 минуту 23 секунды:
нет, из БД быстрее, особенно когда сессий много. еще быстрее мемкеш.
Неактивен
http://habrahabr.ru/blogs/php/28418/ o_O
- - - -
А епт, это для виртуального хостинга.
Отредактировано tipsun (2011.04.10 10:00)
Неактивен
Не, ну там написано типа для гостей не надо сессию начинать, как я понял.
Не надо старые сессии продолжать при получении куков, а стартовать новую с данными юзера.
- - - -
А если так делать, то надо в базу лезть.
И если даже для гостей сессию не начинать, то как captcha будет работать.
В принципе в этой сессии кроме ид, статуса и каптчи ниче не хранится у меня.
- - - -
Я в принципе писал, что пока не разбираюсь в этих делах, но хочу разобраться.
Там пример тоже приводится в конце статьи...
Отредактировано tipsun (2011.04.10 19:32)
Неактивен
Набросок
|
|
Отредактировано tipsun (2011.04.12 11:13)
Неактивен
перед тем как делаешь session_destroy сделай еще и $_SESSION = null;
и пиши имена функций с маленькой буквы не Session_Destroy, а session_destroy.
а вообще не вижу смысла делать session_destroy, а затем сразу же делать session_start.
Неактивен
Спс всем. Буду еще думать.
Подумал:
|
|
Отредактировано tipsun (2011.04.12 18:50)
Неактивен
Вот сделал. Подскажите пожалуйста, нет ли ошибок? А то я вот только начал use PDO...
|
|
Друг подсказал, что надо и браузер в это дело подключить и еще ип сравнивать только по 3м первым диапазонам. 4ый меняется.
Отредактировано tipsun (2011.04.13 18:00)
Неактивен
вместо $db->exec("SET NAMES 'utf8';"); делай так
|
|
Вместо fetch(PDO::FETCH_ASSOC); укажи один раз, и вс
|
|
Вот это:
|
|
Сделай как плагинизацию (в котором ты будешь разширять класс пдо) такой метод
|
|
В общем глянь как это в роторе сделано! удобней чем каждый раз это все писать!
Неактивен
Nu3oN написал:
$db = new PDO($host_db, $user, $pass, array(PDO :: MYSQL_ATTR_INIT_COMMAND => 'SET NAMES `utf8`'));
http://php.net/ChangeLog-5.php#5.3.6
Implemented FR #47802 (Support for setting character sets in DSN strings). (Kalle)
так, к сведению, начиная с PHP 5.3.6 кодировку можно указвыать прямо в строке подключения
Неактивен
Ахринеть, это только сессия!
Надо более компактно и логично сделать...
|
|
Отредактировано tipsun (2011.04.16 14:48)
Неактивен
Чет мне народ говорит, что говнокод.
Типа по диапазону не стоит проверять, да и если так, то можно через модем билайн зайти, браузер поставить как у жертвы и все...
- - - -
Как тогда сделать?
Отредактировано tipsun (2011.04.17 06:50)
Неактивен
я вообще не понимаю, нафига ты что-то мудришь? ты банковскую систему чтоли пишешь? идентифицируй пользователя по сессии и хватит. если пользователь умудрился потерять потерять куки, то ему уже ничто не поможет, ИМХО.
Неактивен
Вебмани хотел переплюнуть
- - - -
Снова я заблудился.
- - - -
Пофиг на функцию запомнить...
Вот типа авторизовался, побродил.
Вышел кука ид сессии удалилась, она ведь при закрытия браузера удаляется...
И эмм... все?
- - - -
|
|
Отредактировано tipsun (2011.04.17 08:27)
Неактивен
tipsun написал:
И эмм... все?
Неактивен
Nu3oN написал:
В общем глянь как это в роторе сделано! удобней чем каждый раз это все писать!
Да, спс, шикарно. И в конце разъединяет.
- - - -
Правда я пока и применять, и сам писать класс наверно не буду.
Я и в классы плохо понимаю и pdo только начал осваивать.
Неактивен
|
|
Неактивен
Шифруй пароли с мусором
md5($_POST['pass'].'мусор');
а потом проверяй пароль но подставляя мусор который ты заранее подставляеш
$pass = $_POST['pass'].'мусор';
if($pass == $user['pass']) echo 'ok'; else echo 'иди нах';
Неактивен
Ну кто-то спёр базу, допустим, а там пороли. Дык зашифрованные ещё надо расшифровать, а это большие проблемы, и если ещё получится это сделать.
Отредактировано DarkRiDDeR (2011.09.14 04:46)
Неактивен
Ну соль сильно не будет влиять на усложнение расшифровки, к тому же, если удасться расшифровать пару паролей, у них будет одинаковый конец - соль, хотя... Я думаю md5 хватит. Ну я использую md5(sha1()), пусть расшифровывают, это намного труднее, чем всякие соль.
Неактивен
WapStyle написал:
Шифруй пароли с мусором
md5($_POST['pass'].'мусор');
а потом проверяй пароль но подставляя мусор который ты заранее подставляеш
$pass = $_POST['pass'].'мусор';
if($pass == $user['pass']) echo 'ok'; else echo 'иди нах';
Это при сохранении в базу?
Я без соли сохранял.
При авторизации:
Ник / Пароль
Проверка в базе
1 Все совпадает, даем сессию занося туда ид/уровень (везде где надо проверка на сущ. сессии).
Хотя можно и в шапке сделать проверку. Или функцию сделать.
0 Просим повторить ввод данных.
Отредактировано tipsun (2011.09.14 19:32)
Неактивен
Но зачем расшифровывать, если можно просто вставить в заголовок c куками и произвести авторизацию.
Я имею в виду шифровать пароль для записи в куку
Отредактировано TLENS (2011.09.14 21:34)
Неактивен
Ну я про куки не говорил, в куки пароль воопще незачем пихать, хоть зашифрованны, хоть незашифрованный. Для авторизации существуют сесси, они для этого и созданы, и нечего делать авторизацию на куках: возможностей меньше и защита меньше.
Неактивен
Или я снова, как всегда, не понимаю сути, или...
Все таки так, потому что это будет в шапке. А параметры мы задали в авторизации.
|
|
А так, при авторизации, если юзер нажмет запомнить.
Только вот сейчас вопрос возник, если юзер использовал сессию до истечения срока, например в 1 минуту, то удаление файла сессии снова отложится на 1440 сек или нет?
|
|
Отредактировано tipsun (2011.10.09 12:58)
Неактивен
Давать пасс в куку (даже шифрованный) не есть айс. Как делаю я
1. При авторизации(успешной) в базу записыватся хеш(рандомный) для определённого юзера и этот же хеш даётся юзеру в куку
2. Если юзер покинул сайт (нажал выход) идёт уничтожение куки у юзера и смена хеш в базе на рандомный.
3. Пароль узнать невозможно и сменить тоже, даже если авторизация была успешной(если каким то макаром удалось своровать действуюбщий хеш), т.к. при смене попросит вести старый пароль.
Отсюда имеем у юзера нет хеша, а если он его сохранил он всёравно не подойдёт, т.к. при выходе скрипт скрипт сам поменял хеш. Если юзер боиться что его акк взломали просто нужно нажать выход и заново авторизироваться(хеш будет изменён)
Ну как так ))
Неактивен
tipsun написал:
... Только вот сейчас вопрос возник, если юзер использовал сессию до истечения срока, например в 1 минуту, то удаление файла сессии снова отложится на 1440 сек или нет?
Время отсчитывается от последнеого обращения посетителя т.е. это время доступа к файлу, а не создания.
Отредактировано tipsun (2011.10.09 10:11)
Неактивен
С механизмом запоминания наверно можно так поступить:
- при авторизации пользователь указывает сайту "запомни меня".
- сайт создает обычную сессию + куку, имя которой заносится в базу.
Если есть PHPSESSID у пользователя, значит не надо проверять куку.
Другое дело, если PHPSESSID есть, а файл сессии удалился...
Наверно проверить по куке и сгенерировать новый PHPSESSID.
Это я только сейчас додумался, точнее сама в голову пришла идея.
Хотя давно все так делают 100%
Неактивен
Насчет сроков не посмотрел. Ну регерится с теми же сроками или нет.
Остальное за файлом/механизмом авторизации.
|
|
Отредактировано tipsun (2012.02.10 19:21)
Неактивен
|
|
Отредактировано tipsun (2012.02.11 09:17)
Неактивен
да и не SID тоже, лучше подгонять под конкретный проект. на вапинете скажем, сессия SID может ставится и в блогах и на форуме. в таком случае они будут перезаписывать друг друга.
лучше называть что-то типа wapinet_blog, wapinet_forum и т.д.
Неактивен
Чет не удаляется печенюха с "лисы".
Простая сессия, кука пропадает после закрытия браузера.
Чет она не удаляется. Видимо только при закрытии браузера only.
Или все-таки можно удалить?
|
|
Добавлено спустя 6 минут 39 секунд:
Все, я понял в чем дело.
|
|
Отредактировано tipsun (2012.02.13 11:50)
Неактивен
И зачем session_get_cookie_params() вообще нужна, если она нифига не работает...
Можно как-то о куке которая у браузера узнать побольше?
- - - -
Точнее работает, когда указано явно session_set_cookie_params() или через ini_set() наверно.
Отредактировано tipsun (2012.02.13 14:26)
Неактивен
tipsun написал:
И зачем session_get_cookie_params() вообще нужна, если она нифига не работает...
работает в соответствии с документацией.
на серверных языках о куках особо инфы не получить. видимо.
Неактивен
|
|
Добавлено спустя 8 минут 17 секунд:
Указал в параметрах куки сессии SESSION_LIFETIME из соображений, если пользователь зашел на сайт, а файла нет, то скорее всего его долго не было. А раз долго не было, а кука сохранилась, значит он нажимал на (запомнить).
Хотя может я и не прав. Время жизни файла сессии по умолчанию вроде, как помню, 1440 секунд
Отредактировано tipsun (2012.02.13 21:15)
Неактивен
Ну можно довести сохранение файла сессии до 60*60*6 = 6 часов или сделать 12 часов, не знаю.
Вероятность ошибочного присвоения метки (запомнить) будет меньше, наверно...
Отредактировано tipsun (2012.02.13 20:55)
Неактивен
Вроде, готово.
|
|
Отредактировано tipsun (2012.02.16 13:49)
Неактивен
В базе нужно будет помимо `session_id` сделать еще `session_expire`, а то кука удалится, а поле в базе с этим `session_id` будет активна.
Мне так кажется.
Отредактировано tipsun (2012.02.29 12:10)
Неактивен
|
|
Отредактировано tipsun (2012.03.04 08:46)
Неактивен
Только сейчас додумался, что можно пароль и потом проверить. Вот дурья башка.
Обычно с запросом проверяется.
|
|
Отредактировано tipsun (2012.03.08 21:39)
Неактивен
Хотел в класс запихать код для старта сессии при получении печеньки и при присутствии/отсутствии файла сессии, но чет не знаю как практичней.
Не хочу трогать базу, ну через конструктор заносить сингтон базы.
Я за независимость
Просто почитал чуть про хороший код. И типа лучше всего, когда класс не зависит от другого класса/кода.
Добавлено спустя 1 минуту 9 секунд:
Сейчас наброски скину.
Неактивен
Еще думал, как принимать тучу параметров печенья.
Была мысль о ini_set()
Но потом подумал, это на 1 раз или нет,
т.к. другие скрипты тоже могут использовать сессию.
|
|
Добавлено спустя 5 минут 54 секунды:
Можно сказу задать параметры через конструктор или потом в методе указывать...
Добавлено спустя 6 минут 55 секунд:
Или плюнуть на файлы и сделать класс на базе?
Отредактировано tipsun (2012.06.29 08:35)
Неактивен
Хм. А что мне мешает сделать все без сессии?
В базе есть поле для cookie_id по нему пусть и получают доспуп пользователи. Какого фига сессия нужна там?
Чем сессия будет каждый раз open+unserialize лучше уж запрос в базу.
Может понадобиться обычная сессия для captcha только наверно.
Неактивен
Либо у меня горячка, либо озарение простых вещей
Хотя если файл сессии сохранился, то в принципе все будет быстро...
|
|
Добавлено спустя 1 минуту 56 секунд:
Отредактировано tipsun (2012.06.29 14:23)
Неактивен
Выдавай в куки временный хеш...например если чел авторизировался ему в куки хеш..вышел кеш заменяется на любой случайный...если не дурак поймёш
Отредактировано WapStyle (2012.07.03 17:22)
Неактивен
WapStyle, спасибо за идею.
Добавлено спустя 8 минут 20 секунд:
Так.
У меня, типа , есть отдельная таблица с активными/онлайн. Может сделать раздельно?
Там у меня записи не удаляются. (REPLACE).
Можно, в принципе зачищать поля с id=0 т.к. гости его не имеют.
Значит вполне возможен вариант с проверкой юзеров, которые не подавали активности, скажем, 20 часов.
|
|
Отредактировано tipsun (2012.07.03 19:35)
Неактивен
Допустим можно узнать папку с PHP:
|
|
Можно узнать путь к файлу исполнения:
|
|
А куда пихать созданный файл cgi непонятно.
Еще думал насчет другого варианта:
|
|
И думал может нафиг это все,
использовать стандартный путь.
Неактивен
Gemorroj написал:
$hash = md5(microtime()); // тут microtime массив вернет. а md5 просит строку
|
|
Неактивен
Лучше?
|
|
Неактивен
Как-то так?
|
|
Отредактировано tipsun (2012.07.27 14:40)
Неактивен
Я решил fetch() тоже не обременять.
|
|
Отредактировано tipsun (2012.07.27 18:53)
Неактивен
habrahabr.ru/post/13726 - хорошая статья.
Добавлено спустя 4 минуты 9 секунд:
- Поле Cookie_timestamp наверно лишнее. Можно и auth_timestamp, время последней авторизации, использовать.
- Привязку к ип попробую прикрутить
- Еще забыл проверять remember - при регенерации печенья чтоб нужный срок действия задать.
Неактивен