[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита сессий
Master812
Всем привет!

Прочитал эту статью на хабрахабре про защиту сессий и мне показалось, что представленные в ней варианты защиты фуфло. Я использую совсем другую защиту. Хочу чтобы вы рассудили кто прав. А то может всё наоборот и на самом деле это моя защита фуфло.

Для входа в админку у меня есть файл admin.php в котором хранятся логин и пароль, а так же имеется файл session_protection.php, в котором хранится защитный ключ. Выглядит это так:

admin.php:
<?php
$login = 'admin'; // логин админа
$pass = 'qwerty'; // пароль админа
?>


session_protection.php:
<?php
$session_protection = '1-lkfjhlkjhrl435l@#$'; // ключ для защиты сессии
?>


При входе в админку сравниваем логин и пароль, которые ввёл юзер и если они совпадают, то присваивается сессия админа, которая равна переменной $session_protection, т.е. защитному ключу:

$_SESSION['admin'] = $session_protection;


И далее показываем панель управления сайтом.

Если же кто-то захочет подделать сессию и присвоить сессии с именем admin любое другое значение, не совпадающее с ключём, то сработает код ниже и выйдет сообщение, что его определили как взломщика и хрен он что получит, а не доступ к панели управления сайтом :)

if ($_SESSION['admin'] != $session_protection)
{
echo 'Вы наглый взломщик и поддельщик сессии!';
}


Как Вам такой вариант защиты? Он хороший или ерунда? А то я не такой мастер в php и могу ошибаться.
AllesKlar
Master812
Ты серьезно? Статья от 2011 года.
Хочешь контроля над сессиями, организуй собственный механизи, хоть на файлах, хоть в базе, где будешь проверять не только SID, но и юзер-агент, ip, запах изо рта, промили алкоголя в крови и т.д.

Что касается твоего "кода" - а в чем защита-то?
В чем разница между
$session_protection = '1-lkfjhlkjhrl435l@#$'
$_SESSION['admin'] = $session_protection;
// и
$session_protection = '1';
$_SESSION['admin'] = $session_protection;
// ?????


Хоть есть у тебя там ключи, хоть нет, если у тебя спиздили куку с SID, то всё это мертвому припарка.
Помимо прочего, как будешь осуществлять функцию "Забыл пароль" ?
Путем отправки СМС разработчикам "пожалуйста, измените пароль"?
Как на счет того, что пароли нужно периодически менять? Каждый раз лезть в исходники?

Да и вообще... пользователь сайта, в том числе имеющий доступ к админке, в 99,99999% случаев понятия не имеет ни о php ни об файловой системе.

_____________
[продано копирайтерам]
walerus
Цитата
Если же кто-то захочет подделать сессию и присвоить сессии с именем admin любое другое значение

Первое: Для начала ему нужно будет определить что переменная "админ", это именно для входа в админку, можно же назвать и "Im God Mf"... или еще какое нибудь md5...

Второе: На основании чего он будет "вычислять" какое значение присвоить переменной $_SESSION['admin']... ?
Master812
Цитата
Хоть есть у тебя там ключи, хоть нет, если у тебя спиздили куку с SID, то всё это мертвому припарка.

AllesKlar, ну куки можно спиздеть от чего угодно даже от сайта "Вконтакте". Меня больше интересует можно ли создать сессию без куков? Ну то есть ты знаешь, что на сайте вход в админку осуществляется через $_SESSION['admin'], можно ли создать поддельную $_SESSION['admin'] без куков? И ещё вопрос - Можно ли как-нибудь без участия куков украсть $session_protection, если она записана в файл? Объясните, плиз, новичку)

Цитата
Помимо прочего, как будешь осуществлять функцию "Забыл пароль" ?
Путем отправки СМС разработчикам "пожалуйста, измените пароль"?
Как на счет того, что пароли нужно периодически менять? Каждый раз лезть в исходники?

AllesKlar, не, тут у меня всё организовано, есть и восстановление пароля и смена его, я ведь не весь код сюда выложил а лишь часть его.
Master812
Первое: Для начала ему нужно будет определить что переменная "админ", это именно для входа в админку, можно же назвать и "Im God Mf"... или еще какое нибудь md5...

Второе: На основании чего он будет "вычислять" какое значение присвоить переменной $_SESSION['admin']... ?

walerus, ну предположим я свой движок выложу в сеть, чтобы все пользовались. Предположим хакер научится определять на каком сайте какой движок и тогда заглянув в исходники он будет знать, что переменная носит имя именно "admin". Но вот защитный ключ ($session_protection) везде будет разный, я сделал так что при установке он формируется из случайного числа, которое потом проходит через md5, так что у каждого сайта на моём движке будет разный защитный ключ. Возможно ли подделать сессию в таком случае?
killer8080
Master812
взлом сессии подразумевает кражу сессионных кук, и ничего более! Все переменные в $_SESSION пишет серверный скрипт, клиент никак сам не может на это повлиять. У тебя просто не правильное представление о работе этого механизма, поэтому твоя так называемая защита - полный бред.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.