Давно использую авторизацию в админку своего движка на базе стандартного
header("WWW-Authenticate: Basic realm=\"Authentication Admin\"");
header("HTTP/1.0 401 Unauthorized");
Но дело в том, что такая штука работает только если php на сервере запущен только как модуль Апача.
Слышал звон да не знаю где он по поводу авторизации на базе cookies или сессии.
Подскажите пожалуйста как это делается (ссылками или примером кода)
Спасибо.
Спустя 15 минут, 51 секунда (20.07.2010 - 16:24) KaFe написал(а):
Ну это очень сложно.
Надеюсь принцип понятен или объяснить.
Информацию по сессия читать тут http://www.php.su/functions/?cat=session
Также тут можно еще поглазеть http://www.php.su/phphttp/?methods
if ($_SESSION['admin'])
{
//админка тут
}
else
{
?>
<form action="" method="post">
Логин:<br><input name="login" value=""><br>
Пароль:<br><input name="pass" value="" type="password"><br>
<br><img src="./kernel/capcha.php"><br>
Введите данные с картинки:<br>
<input name="capcha" size="5" value=""><br><br>
<input value="Войти" type="submit">
</form>
<?php
if ($_POST)
{
if ($_POST['capcha'] == $_SESSION['capcha'])
{
if ($_POST['login'] == $global['login'] && $_POST['pass'] == $global['pass'])
{
$_SESSION['admin'] = $_POST['login'];
die(header ('location:'.HOST.'?module=kernel'));
} else echo 'Это админка, а не модуль для забавы ><';
} else echo 'Неверный код капчи.';
}
}
Надеюсь принцип понятен или объяснить.
Информацию по сессия читать тут http://www.php.su/functions/?cat=session
Также тут можно еще поглазеть http://www.php.su/phphttp/?methods
Спустя 6 минут, 54 секунды (20.07.2010 - 16:31) brdm написал(а):
Спасибо. Попробую разобраться.
Буду признателен еще за примерчик cookies.
Буду признателен еще за примерчик cookies.
Спустя 4 минуты, 14 секунд (20.07.2010 - 16:35) KaFe написал(а):
brdm
Цитата (brdm @ 20.07.2010 - 13:31) |
Буду признателен еще за примерчик cookies |
По моему куки лучше не использовать при работе с админкой.
К онечно ты можешь сделать проверку на запись куков, если там куки не включены то вход в админку не возможен, у меня так кстати и сделано.
Спустя 2 минуты, 15 секунд (20.07.2010 - 16:37) brdm написал(а):
Да вобщем все понятно. Зпускается сессия. Потом через пост - сессии присваивается логин (можно и пароль). Далее очевидно просто проверяется сессия и если она равна логину то админка сохраняется. При выходе нужно уничтожить сессию.
Правильно ли я понял?
Правильно ли я понял?
Спустя 1 минута, 35 секунд (20.07.2010 - 16:39) brdm написал(а):
Еще вот подумал.. Не слишком ли это просто с точки зрения безопасности. Ведь сессия некоторое время будет хранить в себе реальный логин в админку.
Можно ли как то это сделать через хеш? И как это будет выглядеть в коде?
Вот набросал некоторый код
Дальше допустим в handl.php делается обработка
И далее вход в админку только если $_SESSION['admin'] == $hash
Насколько это правильно? И нужно ли это все?
Можно ли как то это сделать через хеш? И как это будет выглядеть в коде?
Вот набросал некоторый код
$key = sha1(microtime().mt_rand());
$hash = sha1($login.$key.$pass);
дальше форма в которой в скрытой форме передается $key
и в явном виде $login и $pass типа так..
"<form action='./handl.php' method='post'>Логин:<br>
<input type='hidden' name='key' value='$key'>
<input name='login' value=''><br>
Пароль:<br><input name='pass' value='' type='password'>
<input value='Войти' type='submit'>
</form>";
Дальше допустим в handl.php делается обработка
if ($_POST['login'] == $login && $_POST['pass'] == $pass)
{
$hash = sha1($_POST['login'].$_POST['key'].$_POST['pass']);
$_SESSION['admin'] = $hash;
}
И далее вход в админку только если $_SESSION['admin'] == $hash
Насколько это правильно? И нужно ли это все?