|
|
|
| когда впервые потребовалась система авторизации юзеров сайта, прочит пару статеек и написал свой код. Особо о безопасности не думал, ибо особо этого не требовалось :)
Вообщем начну с того, когда пользователь регистрируется. Заполняет форму, всё как обычно. В обработчике проверяю на ошибки, создаю MD5 хеш пароля и всё это дело в БД.
Далее сам процесс авторизации. 2 варианта - при помощи cookies и сессий. Смысл один - создается 5 сессий/кукисов. Код:
if (empty($_POST['login_action'])) {
echo "<form action='auth.php' method='post' name='auth_page'>
<input class='text' type='text' name='login' value='Логин' onClick=document.auth_page.login.value='' style='width: 100px; height: 18px; margin-bottom: 1px; margin-left: 15px;'> <br>
<input class='text' type='text' name='password' value='Пароль' onClick=document.auth_page.password.value='' style='width: 100px; height: 18px; margin-bottom: 2px; margin-left: 15px;'> <br>
<input class='submit' type='submit' value='Вход' style='width: 65px; height: 20px; margin-left: 15px;'> <br>
<input type='checkbox' name='cookies' value='true' style='margin-top: 6px; margin-bottom: 0px; margin-left: 15px;'><small><u><b>Запомнить</b></u></small>
<input type='hidden' name='login_action' value='true'>
</form>";
} else {
$form_login = $_POST['login'];
$form_password = $_POST['password'];
$form_password = strtoupper(md5($form_password));
$query = mysql_query("SELECT * FROM users WHERE login = '$form_login' AND active = 'show'");
$user_query = mysql_fetch_array($query);
# Проверяем, ввёл ли посетитель логин
if (empty($form_login)) {
$error = $error."<li type='square'><b>Вы не ввели логин</b> <br>";
}
# Проверяем, ввёл ли посетитель пароль
if (empty($form_password)) {
$error = $error."<li type='square'><b>Вы не ввели пароль</b> <br>";
}
if (empty($error)) { // если посетитель всё ввёл, проверяем логин и пароль
# Проверяем правильность логина и пароля
if ($form_login != $user_query['login'] OR $form_password != $user_query['password_md5']) {
$login_error = $login_error."<li type='square'><b>Неверный логин или пароль</b> <br>";
}
if (empty($login_error)) {
$id = $user_query['id'];
$nick = $user_query['nick'];
$login = $user_query['login'];
$password = $user_query['password_md5'];
$_SESSION['network_creative_user'] = "true"; // регистрируем сеанс, говорящий о том, что пользователь авторизован
$_SESSION['network_creative_user_nick'] = "$nick"; // регистрируем сеанс с ником пользователя
$_SESSION['network_creative_user_login'] = "$login"; // регистрируем сеанс с логином
$_SESSION['network_creative_user_password'] = "$password"; // регистрируем сеанс с паролем
$_SESSION['network_creative_user_id'] = "$id"; // регистрируем сеанс с id пользователся
# Проверяем, поставил ли посетитель галку 'Запомнить'
# Если пользователя нужно запомнить, перемещаемся на странцу cookies.php
# с id пользователя, чтобы создать cookies
# Если пользователя запоминать не нужно, сообщаем что всё в порядке и
# перемещаем его на главную страницу
if ($_POST['cookies'] == "true") {
Redirect("cookies.php?id=$id", 0);
} else {
echo "Вы успешно вошли как автор <b><u>$nick</u></b>, под логином <b><u>$login</u></b>. В течении 5 секунд вы будете перемещены на <a href='index.php'><b>Главную страницу</b></a> сайта.";
Redirect("index.php", 5);
}
} else {
echo $login_error; // выводим ошибки неверного логина/пароля, если они есть
}
} else {
echo $error; // выводим сообщения, если пользователь не ввёл логин/пароль
}
}
|
Ну и собственно как в дальнейшем на сайте определяется, авторизован ли юзер
# Этот блок кода определяет, авторизован ли пользователь
if (empty($_SESSION['network_creative_user'])) {
$user = "Неизвестный автор";
$auth_string = "<a href='auth.php'><u>[ войти ]</u></a>";
$access = "deny";
if (!empty($_COOKIE['network_creative_user'])) {
$id = $_COOKIE['network_creative_user_id'];
$nick = $_COOKIE['network_creative_user_nick'];
$user = "<a href='profile.php?user=$id'>$nick</a>";
$auth_string = "<a href='quit.php'><u>[ выйти ]</u></a>";
$access = "allow";
}
} else {
$id = $_SESSION['network_creative_user_id'];
$nick = $_SESSION['network_creative_user_nick'];
$user = "<a href='profile.php?user=$id'>$nick</a>";
$auth_string = "<a href='quit.php'><u>[ выйти ]</u></a>";
$access = "allow";
}
|
Вот и всё. Сейчас снова нужно написать систему авторизации, но подход уже более серьёзный. Можно ли использовать такой скрипт?
PS: блин, думал пишу в PHP, а оказывается в разном, простите.. | |
|
|
|
|
|
|
|
для: NIK
(23.11.2006 в 16:35)
| | В общем, полный кошмар, конечно.
Много, путано и дыряво (в силу первых двух причин).
Проверьте, при каких условиях у вас выполнится этот фрагмент?
<?
$form_password = $_POST['password'];
$form_password = strtoupper(md5($form_password));
...
# Проверяем, ввёл ли посетитель пароль
if (empty($form_password)) {
$error = $error."<li type='square'><b>Вы не ввели пароль</b> <br>";
|
БД скармливаете пользовательские данные безо вской проверки.
Больше всего мне, конечно, понравилось то, что авторизоваться можно подсунув скрипту абсолютно любую куку.
Короче, не дай бог иметь подобный кошмар на своем ресурсе. | |
|
|
|
|
|
|
|
для: Loki
(23.11.2006 в 17:02)
| | понятно, я примерно такое же себе и представлял :)
тогда может кто посоветует грамотную статью как безопасно создать авторизацию (кроме тех что на этом сайте)? | |
|
|
|