[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Оцените авторизацию
sla990
Оцените код авторизации. Насколько безопасный?

<?php
if (file_exists("database.php")) {
# Соединение с БД
include("database.php");
# Фильтрование данных
$username = trim(@mysql_real_escape_string(substr($username, 0, 32)));
$password = trim(@mysql_real_escape_string(substr($password, 0, 32)));
# Проверка данных
if (empty($username)) {
echo "Пожалуйста, введите имя пользователя";
}
else {
if (strlen($username) < 3) {
echo "Имя пользователя не может быть короче 3 символов";
}
else {
if (empty($password)) {
echo "Пожалуйста, введите пароль";
}
else {
# Проверяем, существует ли такой пользователь
$query = @mysql_query("SELECT `id` FROM `admin` WHERE `username` = '".$username."' AND `password` = '".$password."' LIMIT 1");
if (@mysql_num_rows($query) > 0) {
# Составляем хэш
$user_id = trim(@mysql_result($query, 0));
$hash = md5($user_id.$username.$password.getenv("REMOTE_ADDR"));
$_SESSION['id'] = $user_id;
$_SESSION['username'] = $username;
$_SESSION['hash'] = $hash;
echo "Авторизация прошла успешно";
}
else {
echo "Неверный логин или пароль";
}
}
}
}
}
?>



Спустя 19 часов, 43 минуты, 59 секунд (8.01.2009 - 16:41) Sylex написал(а):
mysql_real_escape_string защищает от SQL-инъекций, все нормально.. но написан так...

1. зачем проверять постоянно сущестование файла database.php ?
2. $username и $password откуда берутся? Не из глобального массива $_POST? Проверяется ли существование переменной?
3. trim() логичнее использовать в самом начале в скобках, а не в конце
4. Зачем везде @ ? Они тормозят программу
5. $user_id = trim(@mysql_result($query, 0)); - зачем здесь trim()? id не число?

Спустя 1 день, 52 минуты, 24 секунды (9.01.2009 - 17:34) Кос написал(а):
жестоко. У меня в 2 раза короче... huh.gif

Спустя 1 час, 30 минут, 42 секунды (9.01.2009 - 19:04) Sylex написал(а):
6. Имя пользователя не может быть короче 3 символов. Лишняя проверка
7. Использование echo сразу для вывода - тоже не хорошая идея, надо закидывать ошибки в массив
8. в запросе вместо конкатенации строк, наглядней писать переменные в кавычках, можно взять их в фигурные скобки
9. ставьте отсупы в программе где нужно (табуляцию) для наглядности
10. Видать код неполный. Где проверка, существует ли $_SESSION['hash'] и авторизация пройдена в данном случае? Где выход из сессии?

и еще, ставь код в BB-коды php, наглядней читать

Спустя 20 часов, 49 минут, 53 секунды (10.01.2009 - 15:54) Sylex написал(а):
laugh.gif
11. где проверка на вкл/выкл magic_quotes ? Может данные уже экранированы, и надо это исправить

Спустя 10 дней, 17 часов, 33 минуты, 23 секунды (21.01.2009 - 09:28) twin написал(а):
Не смогли бы Вы объяснить, для чего вот эти танцы с бубном:
PHP
$hash md5($user_id.$username.$password.getenv("REMOTE_ADDR"));

PHP
$_SESSION['hash'] = $hash;
?

Спустя 13 минут, 1 секунда (21.01.2009 - 09:41) kirik написал(а):
twin, в данном случае это не особо нужно. Есть такое понятие как хэширование пароля с "солью". Например обычный хэш пароля (md5($pass)) ставится в куки, если его утырят - не сложно будет его найти его хэш в базе хэшей (если пароль не сложный). А если хэшировать пароль с солью (md5($pass.$salt)), тоесть с каким-то уникальным постоянным значением, то в базе хэшей его уже точно не найдешь.

Спустя 5 минут, 27 секунд (21.01.2009 - 09:46) twin написал(а):
Извиняюсь за некорректно заданный вопрос. Я имел ввиду, чем Автора не устраивает просто такая конструкция:
PHP
$_SESSION['hash'] = "ok";
Зачем в сессию пихать такой навароченный хэш, его ведь все равно ни кто и никогда не увидит...

Спустя 1 час, 13 минут, 6 секунд (21.01.2009 - 10:59) kirik написал(а):
Цитата (twin @ 21.01.2009 - 01:46)
Зачем в сессию пихать такой навароченный хэш, его ведь все равно ни кто и никогда не увидит...

Нужно автора спросить..=) По идее в сессии одного user id хватит с головой =)

Спустя 8 дней, 10 часов, 25 минут, 49 секунд (1.02.2009 - 21:25) sad8c написал(а):
Я бы в свою очередь посоветовал заменить неуместное стреление к бесконечным глубинам вложенности if {...} else{...if {...} else{...}} на более удобный if {...} elseif {...} либо же грамотное switch case.
Что касается безопасности и логики скрипта, прежде любых действий по коду необходимо просмотреть сам массив $_POST. И неплохо бы через него получать что-нибудь вроде параметра action.
Также полезно использовать strip_tags()

Спустя 3 дня, 20 часов, 7 минут, 50 секунд (5.02.2009 - 17:33) PHP-SERVIS-CHATOV написал(а):
Я набираю команду для написания скрипта сервиса чатов сервер домен имею пишыте на форуме или лудше на мыло да на мыло лудше m8att7@i.ua

Спустя 7 часов, 46 минут, 39 секунд (6.02.2009 - 01:19) Семён написал(а):
PHP-SERVIS-CHATOV - Вы бы для начала e-mail по-красивее зарегили

Спустя 15 дней, 14 часов, 50 минут, 30 секунд (21.02.2009 - 16:10) welbox написал(а):
я думаю, автору стоит изучить регулярные выражения, код можно уменьшить в 2 раза и сделать более проще =))).

используй простые правила типа:
preg_match, htmlspecialchars, stripslashes,  md5

и ты сможешь написать полуше код =)))
Быстрый ответ:

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