Понадобилось решить тривиальную задачу: сделать так, чтобы пользователь получил доступ к странице на сайте только если введёт правильные логин и пароль.
Посмотрел в Google, как сделать этот процесс наиболее безопасным. И ахнул: Google мне выдал вот такую бандуру: http://www[dot]wikihow[dot]com/Create-a-[dot][dot][dot]in-PHP-and-MySQL (первый результат по запросу в Google "PHP secure login")
У меня вопрос: действительно ли для безопасной авторизации нужно делать ВСЁ ЭТО? Или можно обойтись чем-то попроще, и безопасность всё равно будет соблюдена?
(при этом их вариант не работает: редирект на нужную страницу делается с помощью header, который не передаёт сессии, а проверка на то, залогинился ли пользователь, делается именно по сессии).
1. jaroslav.tavgen - 02 Января, 2015 - 20:10:46 - перейти к сообщению
2. kotyara1979 - 02 Января, 2015 - 20:39:19 - перейти к сообщению
Цитата:
при этом их вариант не работает: редирект на нужную страницу делается с помощью header, который не передаёт сессии, а проверка на то, залогинился ли пользователь, делается именно по сессии
Переадресация через header и не должна передавать сессию. Сессия вообще не передается никак. Это сгенерённая кука в браузере. И при старте сессии пхп просто проверяет есть такая запись и соответствует ли она существующим записям на сервере.
А вообще безопасность - это та вещь, где не экономят. Вопрос только в целесообразности накручивания механизмов: насколько "вкусные" вещи лежат за паролем, сколько времени люди захотят потратить на взлом, сколько времени вам понадобится на восстановление сломанного.
Короче каждый решает сам.
3. jaroslav.tavgen - 02 Января, 2015 - 21:00:26 - перейти к сообщению
kotyara1979 пишет:
Переадресация через header и не должна передавать сессию. Сессия вообще не передается никак. Это сгенерённая кука в браузере. И при старте сессии пхп просто проверяет есть такая запись и соответствует ли она существующим записям на сервере.
В их варианте после того, как пользователь ввёл правильные логин и пароль, делается переадресация:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- if (login($email, $password, $mysqli) == true) {
- // Login success
А страница protected_page.php вызывает функцию из другого файла, в которой делается следующая проверка:
Переменной $_SESSION при этом не существует (проверял с помощью echo get_defined_vars()), поэтому страница всегда выдаёт надпись "You are not logged in".
kotyara1979 пишет:
А вообще безопасность - это та вещь, где не экономят. Вопрос только в целесообразности накручивания механизмов: насколько "вкусные" вещи лежат за паролем, сколько времени люди захотят потратить на взлом, сколько времени вам понадобится на восстановление сломанного.
Короче каждый решает сам.
Короче каждый решает сам.
Я ничего не имею против максимального обеспечения безопасности. Проблема в том, что я не понимаю, что должен делать тот код, а если его просто тупо скопировать (что я и сделал) - он не работает... Ну вот проверяет этот код наличие superglobal $_SESSION, которой не существует независимо от того, залогинен ты или нет - и как мне понять, почему этот скрипт не работает так, как должен?