[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Покритикуйте код авторизации
skeletor
Скажу сразу, код работает, просто интересно, может стоит где-то оптимизировать или поправить, как нужно.

Собственно имеем такую структуру:
connect.php - подключение к БД
functions.php - описание функций для обработки вводимых данных
index.php - страница с формой авторизации
login.php - авторизация
logout.php - выход
main.php - главная страница

Интересует правильно ли провожу авторизацию и выход.

login.php

<?php

include 'functions.php';
include 'connect.php';

if (isset($_COOKIE['name']))
{
header("Location: main.php");
exit(0);
}

if (!isset($fPassword) or !isset($fUsername))
{
header("Location: index.php");
exit(0);
}

$table_admin = "admin";
$table_domain_admins = "domain_admins";

$result = mysql_query ("SELECT password FROM $table_admin WHERE username='$fUsername' AND active='1'");
$row = mysql_fetch_row($result);

$password = pacrypt ($fPassword,$row['0']);

if ($password == $row['0'])
{
session_start();
session_regenerate_id();
$sessid = session_id();
setcookie("name",$fUsername,time()+3600);
setcookie("sessid",$sessid,time()+3600);
header("Location: main.php");
exit(0);
}

else die('error set cookies');

mysql_close();

if (!isset($_COOKIE['name']))
{
header("Location: index.php");
exit(0);
}

?>



logout.php

<?php

if (isset($_COOKIE['name']))
{
session_start();
setcookie('name', '', -1);
session_destroy();
}

header("Location: index.php");

?>




Спустя 9 минут, 43 секунды (28.07.2010 - 17:41) inpost написал(а):
skeletor
Первое, что бросается в глаза: где защита от неправильно введённых данных? Вдруг вместо Юзера человек напишет какой-нибудь запрос? =)

+ на странице Мain есть ли защита от прямого доступа для пользователей, у которых Сессия отсутствует?

Спустя 3 минуты, 21 секунда (28.07.2010 - 17:45) DedMorozzz написал(а):
http://phpforum.ru/index.php?showtopic=19168 там есть и решения

Спустя 2 минуты, 28 секунд (28.07.2010 - 17:47) skeletor написал(а):
inpost
1) пока нету
2) да, есть. Вот часть кода

session_start();

if (isset($_COOKIE['name']))
{
echo "auth ok <br>",$_COOKIE['name'],"<br>",$_COOKIE['sessid'],
"<br><br><a href=logout.php>Выход</a>";
}

else
{
header("Location: index.php");
exit(1);
}


DedMorozzz - спасибо, почитаю.

Спустя 2 минуты, 28 секунд (28.07.2010 - 17:50) inpost написал(а):
Цитата
1) пока нету

Ну раз "Пока нету", то нет смысла разбирать! Ты сделай полностью, тогда и поговорим =)

Спустя 1 минута, 53 секунды (28.07.2010 - 17:52) DedMorozzz написал(а):
В твоём скрипте, если я зарегаюсь с ником "aaa;Drop database /*" то твоей базе не будет скучно.

Спустя 3 минуты, 17 секунд (28.07.2010 - 17:55) skeletor написал(а):
Добавил
$fUsername = mysql_real_escape_string($fUsername);

Теперь нормально?

Спустя 4 минуты, 58 секунд (28.07.2010 - 18:00) DedMorozzz написал(а):
терь база не грохнеться. Но что делать, если у меня ник будет:
"><iframe src="mysite.com"> ???
Когда ты его будешь выводить, как ты думаешь, что будет происходить? smile.gif
Вобщем я тебе дал выше тему - читай.

Спустя 23 часа, 24 минуты, 24 секунды (29.07.2010 - 17:24) skeletor написал(а):
А если обработать через preg_replace? Например, так:
$fUsername = preg_replace('/[^A-Za-z\s]/ui', '', $fUsername);

Тогда инъекции уже не будет. Так?

Спустя 3 минуты, 23 секунды (29.07.2010 - 17:28) DedMorozzz написал(а):
не правильно мыслишь) ограничивать пользователя в допустимых 5и символах - крайне нелепо. Как Твин написал "не бывает опасных символов, бывает их не правильная обработка".
ЗЫ: тему в упор не хочешь читать. Ты наверное написал что бы услышать "ВАУ!!! КЛАССС, супер. Этот скрипт перевернул мой взгляд на мир, он идеален!!". Окай, так и напишем:
ВАУ!!! КЛАССС, супер. Этот скрипт перевернул мой взгляд на мир, он идеален!!

Спустя 29 минут, 38 секунд (29.07.2010 - 17:57) skeletor написал(а):
Мне нужно услышать как правильно это делается.
Прочёл ещё раз примеры с темы, на ссылку которую ты дал там в основном связка htmlspecialchars+trim+mysql_real_escape_string. И ты хочешь сказать, что это лучше, чем preg_replace? Можешь указать, в чём преимущества одного перед другим?

Я пока начинаю кодить на php, поэтому хочу разобраться, что к чему.

Спустя 3 минуты, 23 секунды (29.07.2010 - 18:01) Basili4 написал(а):
DedMorozzz
Не кипятись.

skeletor
Не бывает опасных симолово бывают символы которые воздействуют на скрипт так что он начинает вести себя не как ему полагается вывод не надо их обрабатывать.
Как читай здесь http://irbis-team.com/15/7

Спустя 2 минуты, 10 секунд (29.07.2010 - 18:03) Ice написал(а):
Цитата (skeletor @ 29.07.2010 - 18:57)
Я пока начинаю кодить на php, поэтому хочу разобраться, что к чему.

Если тока начинаешь, че сразу за авторизацию хвататься-то.

session_start();
session_regenerate_id();

Второе зачем?

Спустя 35 секунд (29.07.2010 - 18:03) Basili4 написал(а):
skeletor
конечно preg_replac убивает по твоему мнению опасный символ коверкая текст а
htmlspecialchars заменяет символы которые несут на их сущности

Спустя 1 минута, 3 секунды (29.07.2010 - 18:04) Basili4 написал(а):
Ice
что насайте первое что видишь авторизация вот её и первую делают.

Спустя 1 минута, 46 секунд (29.07.2010 - 18:06) DedMorozzz написал(а):
Цитата
Прочёл ещё раз примеры с темы, на ссылку которую ты дал там в основном связка htmlspecialchars+trim+mysql_real_escape_string. И ты хочешь сказать, что это лучше, чем preg_replace? Можешь указать, в чём преимущества одного перед другим?
конечно лучше. В 1м случае ты всё оставляешь как есть, но скрипт продолжает работать правильно. А во 2м - ты изменяешь введёную информацию в НАДЕЖДЕ, что скрипт будет работать правильно. Как-то так

Спустя 58 секунд (29.07.2010 - 18:07) Ice написал(а):
Цитата (Basili4 @ 29.07.2010 - 19:04)
что насайте первое что видишь авторизация вот её и первую делают.

Сайт пусть сначала сделают нормально. Авторизааация biggrin.gif

Спустя 4 минуты, 57 секунд (29.07.2010 - 18:12) skeletor написал(а):
Basili4 Спасибо, почитаю.
Ice Появилась задача: добавить авторизацию к сайту, поэтому и взялся за авторизацию. session_regenerate_id(); - заново генерю id

То есть свзяки htmlspecialchars+trim+mysql_real_escape_string вполне достаточно, что избавится от инъекции? Или нужна ещё какая-то проверка?

Спустя 58 секунд (29.07.2010 - 18:13) DedMorozzz написал(а):
Ну если знаешь, что в значении передаёься число, то и указывай перед переменой, что вставляемая величина числа. А так, в принципе - вполне достаточно.

Спустя 1 минута, 10 секунд (29.07.2010 - 18:14) Ice написал(а):
Цитата (skeletor @ 29.07.2010 - 19:12)
Ice Появилась задача: добавить авторизацию к сайту, поэтому и взялся за авторизацию. session_regenerate_id(); - заново генерю id

Я не спросил что ты делаешь. Я спросил зачем?

Спустя 3 минуты, 43 секунды (29.07.2010 - 18:18) skeletor написал(а):
Ice Потому что, кроме меня никто не сможет этого сделать.

Спустя 5 минут, 1 секунда (29.07.2010 - 18:23) DedMorozzz написал(а):
Вот как выглядят избранные laugh.gif

Спустя 24 секунды (29.07.2010 - 18:23) Ice написал(а):
Цитата (skeletor @ 29.07.2010 - 19:18)
Потому что, кроме меня никто не сможет этого сделать.

Зачем айдишник перегенерировываешь??!

Спустя 47 минут, 51 секунда (29.07.2010 - 19:11) KaFe написал(а):
Цитата (skeletor @ 29.07.2010 - 15:12)
Появилась задача: добавить авторизацию к сайту
а че задача добавить регистрацию не появилась?

Спустя 11 минут, 51 секунда (29.07.2010 - 19:23) gzim9x написал(а):
skeletor
вся авторизация состоит в проверке существования $_COOKIE['name']?
надеюсь, вы не укажите здесь URL разрабатываемого сайта....




_____________
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"
Быстрый ответ:

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