Доброго времени суток. Имеется скрипт admin.php, отвечающий за редактирование содержимого веб-сайта. Устроен по принципу - анализ GET и include различные файлы с формами, файлы записывающие всё в базу и т.п. Авторизацию сделал так - PHP: <?php session_start(); if ($_SESSION['auth'] === "auth") { //тут switch GET и целая пачка case : include } else { //если нажата POST['submit'] дергаем пароль из базы и сверяем с полученным из формы. Совпадает - $_SESSION['auth'] = "auth" и перенаправление на самого себя Не совпадает - сообщение об ошибке если не нажата - выводим форму. } ?> Собственно вопрос - нормальна ли данная авторизация, или ... ... белую краску для волос уже купил)) П.с. - запись в базе всего одна и более не предвидится. Т.е. исключительно админ-редактор.
а самые критичные вещи таки не показал: проверка пароля и подключение файла. А вообще, для бытовых нужд нормально
файл просто include_once(blabla.php) проверка PHP: <?php $login = get_chars($_POST['login']); // get_chars - stripslashes + trim + strip_tags $password = get_chars($_POST['password']); $sql="SELECT * FROM admin_users WHERE login = '".$login."' AND password = '".md5($password)."'"; $rs = mysql_query($sql); $arr = mysql_fetch_assoc($rs); if (mysql_num_rows($rs)>0 && md5($password)==$arr['password']) { $_SESSION['auth'] = "auth"; header("Location:".$http_path."admin"); } ?>
$login=mysql_escape_string($login); $sql="SELECT * FROM admin_users WHERE login = '".$login."' AND password = '".md5($password)."'"; session_start после проверки логина с паролем, а не в начале страницы $_SESSION['auth'] === "auth" - в твоем случае, сойдет, так лучше не делать.
session_start в начале, потому что при каждом обновлении страницы (в include-файлах содержатся формы) мы не запрашиваем пароль, а просто проверяем наличие $_SESSION['auth']===auth mysql_escape_string - спасибо, дорисую. Я слегка путаюсь с её применением)
нет-нет)) там я писал что switch-case. Значения GET['page'] только те, что в case упоминаются - default выводит меню.
тогда PHP: <?php session_start(); if ($_SESSION['auth'] === "auth") { //тут switch GET и целая пачка case : include } else session_destroy(); ?>
tommyangelo, в сессию запишите необходимую Вам информацию об авторизованном пользователе. Важно, чтобы сессию авторизованного пользователя не угнали, получив SID. Этого будет достаточно для обеспечения безопасности Вашего приложения.
Нужно записать лишь тот факт, авторизован он или нет. Используется переменная $_SESSION['auth']. А где можно почитать о том, как угнать SID ?
Cид передается в куках или GET/POST, в последнем случае он приписывается параметром ко всем внутренним ссылкам и формам. Обычно называется PHPSESSID