Покинул форум
Сообщений всего: 8
Дата рег-ции: Янв. 2015
Помог: 0 раз(а)
Понадобилось решить тривиальную задачу: сделать так, чтобы пользователь получил доступ к странице на сайте только если введёт правильные логин и пароль.
У меня вопрос: действительно ли для безопасной авторизации нужно делать ВСЁ ЭТО? Или можно обойтись чем-то попроще, и безопасность всё равно будет соблюдена?
(при этом их вариант не работает: редирект на нужную страницу делается с помощью header, который не передаёт сессии, а проверка на то, залогинился ли пользователь, делается именно по сессии).
Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012
Помог: 7 раз(а)
Цитата:
при этом их вариант не работает: редирект на нужную страницу делается с помощью header, который не передаёт сессии, а проверка на то, залогинился ли пользователь, делается именно по сессии
Переадресация через header и не должна передавать сессию. Сессия вообще не передается никак. Это сгенерённая кука в браузере. И при старте сессии пхп просто проверяет есть такая запись и соответствует ли она существующим записям на сервере.
А вообще безопасность - это та вещь, где не экономят. Вопрос только в целесообразности накручивания механизмов: насколько "вкусные" вещи лежат за паролем, сколько времени люди захотят потратить на взлом, сколько времени вам понадобится на восстановление сломанного.
Короче каждый решает сам.
----- Сделать можно все. Главное одеть каску.
jaroslav.tavgen
Отправлено: 02 Января, 2015 - 21:00:26
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Янв. 2015
Помог: 0 раз(а)
kotyara1979 пишет:
Переадресация через header и не должна передавать сессию. Сессия вообще не передается никак. Это сгенерённая кука в браузере. И при старте сессии пхп просто проверяет есть такая запись и соответствует ли она существующим записям на сервере.
В их варианте после того, как пользователь ввёл правильные логин и пароль, делается переадресация:
Переменной $_SESSION при этом не существует (проверял с помощью echo get_defined_vars()), поэтому страница всегда выдаёт надпись "You are not logged in".
kotyara1979 пишет:
А вообще безопасность - это та вещь, где не экономят. Вопрос только в целесообразности накручивания механизмов: насколько "вкусные" вещи лежат за паролем, сколько времени люди захотят потратить на взлом, сколько времени вам понадобится на восстановление сломанного.
Короче каждый решает сам.
Я ничего не имею против максимального обеспечения безопасности. Проблема в том, что я не понимаю, что должен делать тот код, а если его просто тупо скопировать (что я и сделал) - он не работает... Ну вот проверяет этот код наличие superglobal $_SESSION, которой не существует независимо от того, залогинен ты или нет - и как мне понять, почему этот скрипт не работает так, как должен?
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
jaroslav.tavgen пишет:
(при этом их вариант не работает: редирект на нужную страницу делается с помощью header, который не передаёт сессии, а проверка на то, залогинился ли пользователь, делается именно по сессии).
передаються не сессии а кука с ИД сессии. передаете не вы, а браузер в заголовках запроса (исключением являеться инициализация сессии).
jaroslav.tavgen пишет:
Переменной $_SESSION при этом не существует (проверял с помощью echo get_defined_vars()), поэтому страница всегда выдаёт надпись "You are not logged in".
Это суперглобальный массив. он всегда существует
jaroslav.tavgen пишет:
залогинен ты или нет - и как мне понять, почему этот скрипт не работает так, как должен?
jaroslav.tavgen пишет:
if (isset($_SESSION['user_id'],
$_SESSION['username'],
$_SESSION['login_string'])) {
примерно так проверяеться, а не проверкой ести ли массив $_SESSION. правда достаточно просто проверить ИД
Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012
Помог: 7 раз(а)
Проверьте как отрабатывается старт сессии. В вашем случае, за это отвечает функция sec_session_start(). Посмотрите, что она делает, доходит ли там до старта сессии.
Глобальный массив _SESSION будет доступен только при старте сессии.
Покинул форум
Сообщений всего: 8
Дата рег-ции: Янв. 2015
Помог: 0 раз(а)
esterio пишет:
Это суперглобальный массив. он всегда существует
echo (get_defined_vars()) не показывает его. А указанный мной выше "if isset..." даёт FALSE.
kotyara1979 пишет:
Проверьте как отрабатывается старт сессии. В вашем случае, за это отвечает функция sec_session_start(). Посмотрите, что она делает, доходит ли там до старта сессии.
Как это можно проверить?
esterio
Отправлено: 02 Января, 2015 - 21:25:34
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
Помог: 127 раз(а)
jaroslav.tavgen пишет:
echo (get_defined_vars()) не показывает его. А указанный мной выше "if isset..." даёт FALSE.
а session_start не забили?
jaroslav.tavgen
Отправлено: 02 Января, 2015 - 21:26:52
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Янв. 2015
Помог: 0 раз(а)
Весь процесс происходит так: заходишь на файл login.php. Вводишь логин и пароль. Скрипт перенаправляет тебя на страницу /includes/process_login.php, которая выглядит очень просто:
Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012
Помог: 7 раз(а)
А у вас вывод ошибок включен? error_reporting, какой уровень?
----- Сделать можно все. Главное одеть каску.
jaroslav.tavgen
Отправлено: 02 Января, 2015 - 21:42:40
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Янв. 2015
Помог: 0 раз(а)
Насчёт $_SESSION, конечно, перепутал: она действительно всегда существует, но на странице /includes/process_login.php в ней есть значения, а на странице protected_page.php она пустая...
kotyara1979 пишет:
А у вас вывод ошибок включен?
error_reporting, какой уровень?
Какой уровень error_reporting не знаю (узнаю чуть позже), но ошибки выводятся.
jaroslav.tavgen
Отправлено: 03 Января, 2015 - 21:49:55
Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Янв. 2015
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.