<?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. зачем проверять постоянно сущестование файла 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 раза короче...
Спустя 1 час, 30 минут, 42 секунды (9.01.2009 - 19:04) Sylex написал(а):
6. Имя пользователя не может быть короче 3 символов. Лишняя проверка
7. Использование echo сразу для вывода - тоже не хорошая идея, надо закидывать ошибки в массив
8. в запросе вместо конкатенации строк, наглядней писать переменные в кавычках, можно взять их в фигурные скобки
9. ставьте отсупы в программе где нужно (табуляцию) для наглядности
10. Видать код неполный. Где проверка, существует ли $_SESSION['hash'] и авторизация пройдена в данном случае? Где выход из сессии?
и еще, ставь код в BB-коды php, наглядней читать
7. Использование echo сразу для вывода - тоже не хорошая идея, надо закидывать ошибки в массив
8. в запросе вместо конкатенации строк, наглядней писать переменные в кавычках, можно взять их в фигурные скобки
9. ставьте отсупы в программе где нужно (табуляцию) для наглядности
10. Видать код неполный. Где проверка, существует ли $_SESSION['hash'] и авторизация пройдена в данном случае? Где выход из сессии?
и еще, ставь код в BB-коды php, наглядней читать
Спустя 20 часов, 49 минут, 53 секунды (10.01.2009 - 15:54) Sylex написал(а):
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()
Что касается безопасности и логики скрипта, прежде любых действий по коду необходимо просмотреть сам массив $_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
и ты сможешь написать полуше код =)))
используй простые правила типа:
preg_match, htmlspecialchars, stripslashes, md5
и ты сможешь написать полуше код =)))