Нужен совет по созданию авторизации
Вот собственно код acess.php
Код:
<?php
session_start();
# Выход из админского раздела
function close()
{
session_unregister('pass');
session_unregister('login');
Header("Location: index.php");
die;
}
if(!empty($_GET['action'])) { $action = $_GET['action']; }
if($action == "exit")
{
close();
}
# если не чпокнули то в шлём в попу
if(empty($_POST['chpok'])) { print "fuck off"; die; }
include("config.php");
$login = $_POST['login'];
$pass = $_POST['pass'];
# если пасворд или логин не правильный то ясен пень што делаем
if(($login != $admin_login) or ($pass != $admin_pass))
{
$_SESSION['err'] = "enter_err";
Header("Location: index.php");
die;
}
# если пасворд правильный убираем собщение об ошибке и отправляем на index.php
session_unregister('err');
$_SESSION['pass'] = $pass;
$_SESSION['login'] = $login;
Header("Location: index.php?action=admin");
# если просто запрошен файл acess.php посылаем в попу
if(!defined("IN_ADMIN")) { print "fuck off"; die; }
?>
session_start();
# Выход из админского раздела
function close()
{
session_unregister('pass');
session_unregister('login');
Header("Location: index.php");
die;
}
if(!empty($_GET['action'])) { $action = $_GET['action']; }
if($action == "exit")
{
close();
}
# если не чпокнули то в шлём в попу
if(empty($_POST['chpok'])) { print "fuck off"; die; }
include("config.php");
$login = $_POST['login'];
$pass = $_POST['pass'];
# если пасворд или логин не правильный то ясен пень што делаем
if(($login != $admin_login) or ($pass != $admin_pass))
{
$_SESSION['err'] = "enter_err";
Header("Location: index.php");
die;
}
# если пасворд правильный убираем собщение об ошибке и отправляем на index.php
session_unregister('err');
$_SESSION['pass'] = $pass;
$_SESSION['login'] = $login;
Header("Location: index.php?action=admin");
# если просто запрошен файл acess.php посылаем в попу
if(!defined("IN_ADMIN")) { print "fuck off"; die; }
?>
Только не смейтесь над этим :)
Более дурного, нежеле запись пароля куда либо я не видел. Достаточно один раз проверить и записать флаг об авторизации + те данные, которые тебе потом могут понадобиться (логин, дата последнего входа и т.д.) + register globals off. Т.к. сессии хранятся на сервере, то доступа к ним нет (увод сессии и подсовывание линка в расчёт сейчас не берём). Можно конечно ещё делать хеш из логин + IP + ещё что-то...
Потом ещё вопросик: если register globals off, то регистрация переменных в сессии не пашет ведь так? а как тогда быть?
И ещё один вопрос: если отключены куки как подключиться к сессии?
Первый раз слышу.. По крайней мере что мешает использовать $_SESSION['variable'] = 'value';??
>> если отключены куки как подключиться к сессии?
читай мануал. если отключены cookie, то ID сессии будет дописываться ко всем URLам страницы
Я тут вродь на этом форуме в факе по безопасности читал что стоит проверят зарегистрована переменная в сесии или нет, но:
session_unset("var")
и
session_register("var");
как написано в мурзилке работают только при register globals on
Про register_globals вообще забудь. Он должен быть только off и всё, что написано "если register_globals on" просто пропускай. В 6 части вообще его в php.ini не будет, он просто будет тупо в off. И больше читай маны, там это разжёвано всё, а цитировать маны мягко говоря не хочется.
И стоит ли проверять зарегистрована переменная в сессии или нет и собственно говоря стоит ли писать session_register("var");
Мой совет, возьми любой открытый, старый (> 3 лет) продукт и посмотри как там устроена авторизация. Не думаю, что лучшее ты сможешь придумать.
Цитата: ChesnoK
Тогда вот ещё вопрос: после записи об авторизации в сессию есть смысл в будущем проверять соответствие логин-пароль?
И стоит ли проверять зарегистрована переменная в сессии или нет и собственно говоря стоит ли писать session_register("var");
И стоит ли проверять зарегистрована переменная в сессии или нет и собственно говоря стоит ли писать session_register("var");
не надо переавать логины и пароли. храни объект юзера сериализованным в сессии, а передавай только OID сессии, ну или хэш OID+IP-адрес для пущей безопасности, как советовал Shaelf.
http://des-raben.jino-net.ru/new/
В общем проверьте на стойкость так сказать, елси через пару минут там появится надпись "Здарова МихалычЪ" то.... в общем будем думать дальше.