|
|
|
| Необходима авторизация пользователя - его пароль должен быть захеширован MD5?
1) Создал таблицу users:
CREATE TABLE users (
id_user INT NOT NULL auto_increment,
name TINYTEXT,
password TINYTEXT,
PRIMARY KEY (id_user)
) TYPE=MyISAM;
и заполнил её (2 users):
INSERT INTO users VALUES(NULL, 'user1', MD5('pass1'));
INSERT INTO users VALUES(NULL, 'user2', MD5('pass2'));
2) в итоге пароли 'pass1, 2':
id_user name password
1 user1 a722c63db8ec8625af6cf71cb8c2d939
2 user2 c1572d05424d0ecb2a65ec6a82aeacbf
3) использую сессию для формы (index.php):
<?php
// Это файл index.php
session_start();
?>
<form action=handler.php method=post>
Имя посетителя : <input type=text name=name value=<?php echo $_SESSION['user']; ?>><br>
Пароль : <input type=password name=password value=<?php echo $_SESSION['password']; ?>><br>
<input type=submit value=Отправить>
</form>
<?php
// Если посетитель "вошёл" - приветствуем его
if(isset($_SESSION['user'])) echo "Здравствуйте, ".$_SESSION['user']."!";
?>
4) использую сессию для обработчика (handler.ru):
<?php
// Это файл handler.php
$dblocation = "localhost";
$dbname = "test";
$dbuser = "root";
$dbpasswd = "";
// Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
echo( "<P>В настоящий момент сервер базы данных не
доступен, поэтому корректное отображение
страницы невозможно.</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
echo( "<P>В настоящий момент база данных не доступна,
поэтому корректное отображение страницы
невозможно.</P>" );
exit();
}
// Формируем и выполняем SQL-запрос для посетителя с
// именем $_POST['name']
$query = "SELECT password FROM users WHERE name='".$_POST['name']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем пароль
$password = mysql_result($nme, 0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['password'] == $password)
{
// Идентификация прошла успешно - осуществляем
// "вход" посетителя. Для того, чтобы в течении текущей
// сесси посетитель не вводил своё имя пароль повторно -
// передаём их через сессию
if(session_start())
{
$_SESSION['user'] = $_POST['name'];
$_SESSION['password'] = $_POST['password'];
// Осуществляем автоматический переход на
// страницу index.php чтобы убедится, что
// посетитель "вошёл"
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>
</HEAD><body>";
}
}
else
{
echo "Ошибка идентификации: неправильный пароль";
exit();
}
}
// Если в результате запроса не получено ни одной
// строки - посетитель с таким именем не зарегистрирован
else
{
echo "Ошибка идентификации: посетитель не зарегистрирован";
exit();
}
?>
4.1) как добавить схешированый пароль в (handler.php)??? | |
|
|
|
|
|
|
|
для: probnik
(21.03.2009 в 12:44)
| | Это ваш файл handler.php
<?php
//...
//.Много полезного кода
//...
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем хэш пароля из базы данных
$password = mysql_result($nme, 0);
// Сравниваем хэш пароля из базы данных и свежезахэшированный пароль введенный
//пользователем
if (md5($_POST['password']) == $password)
{
// Идентификация прошла успешно - осуществляем
// "вход" посетителя. Для того, чтобы в течении текущей
// сесси посетитель не вводил своё имя пароль повторно -
// передаём их через сессию
if(session_start())
{
$_SESSION['user'] = $_POST['name'];
$_SESSION['password'] = md5($_POST['password']);
// Осуществляем автоматический переход на
// страницу index.php чтобы убедится, что
// посетитель "вошёл"
//...
//.Много полезного кода
//...
?>
|
| |
|
|
|
|
|
|
|
для: Zend72
(22.03.2009 в 13:56)
| | спасибо с хешем разобрался :) | |
|
|
|
|
|
|
|
для: probnik
(22.03.2009 в 15:48)
| | Можете теперь, со спокойной душой, с безопасностью разбираться ;-) | |
|
|
|
|
|
|
|
для: probnik
(21.03.2009 в 12:44)
| | Если вы так будете делать:
$query = "SELECT password FROM users WHERE name='".$_POST['name']."'";
| , то вы SQL инъекции вам обеспечены. Необходимо переменные $_POST, $_GET предварительно обрабатывать функцией mysql_escape_string или mysql_real_escape_string. | |
|
|
|
|
|
|
|
для: winflip
(22.03.2009 в 14:58)
| | так подскажите как именно $_POST обрабатывать функцией mysql_escape_string или mysql_real_escape_string ??? | |
|
|
|
|
|
|
|
|
для: Zend72
(22.03.2009 в 15:56)
| | Для начала проверю ввод данных:
// Выбираем базу данных
...
}
// Извлекаем данные из суперглобального массива $_POST
$name = $_POST['name'];
$password = $_POST['password'];
if(!preg_match("|^[\w\d\. ]+$|i", $name))
exit("Неверный формат имени");
if(!preg_match("|^[\w\d\. ]+$|i", $password))
exit("Неверный формат пароля");
// Дальнейшая обработка данных - проверка правильности пароля
Потом пробую с обработать mysql_escape_string:
// Формируем и выполняем SQL-запрос для $_POST['name']
$query = "SELECT * FROM " . $prefix . "_users
WHERE name= '" . mysql_escape_string( $name). "'
AND password = '" . mysql_escape_string( $password ) . "'";
$nme = mysql_query($query);
if(!$nme)
...
Выдаёт: не зарегестрирован в БД??? | |
|
|
|
|
|
|
|
для: probnik
(22.03.2009 в 21:19)
| | В целом тут тока одна ошибка. Нужно еще применять stripslashes, если get_magic_quotes_gpc() == 1, то есть
$name = $_POST['name'];
$password = $_POST['password'];
if(get_magic_quotes_gpc()) {
$name = stripslashes($name);
$password = stripslashes($password);
}
|
А так смотрите сами почему Вам выдает не то, что хотите - из приведённого куска кода вытряхнуть интересного больше ничего нельзя. Может быть Вы действительно не зарегистрированы :-) | |
|
|
|
|
|
|
|
для: Лерк
(22.03.2009 в 21:25)
| | Как раз зарегистрирован:)
В строке ошибся,
($prefix) не надо, я ж по паролю пользователей, а не по их номеру, т.е.:
$query = "SELECT password FROM users
WHERE name = '" . mysql_escape_string( $name ). "'
AND password = '" . mysql_escape_string( $password ) . "'";
Но всё равно выдаёт: Ошибка идентификации: посетитель не зарегистрирован.
Пока было: $query = "SELECT password FROM users WHERE name='".$_POST['name']."'";
Авторизировало нормально!
Где может быть ошибка?? | |
|
|
|
|
|
|
|
для: probnik
(22.03.2009 в 21:19)
| | Имеет смысл привести весь код.
И желательно в тегах [code] | |
|
|
|
|
|
|
|
для: Trianon
(22.03.2009 в 21:27)
| | так код же выложен 21.03.2009 в 12:44!!!
Подскажите что не так??? | |
|
|
|
|
|
|
|
для: probnik
(23.03.2009 в 22:27)
| | Вы же его изменили после этого?
И жаловаться стали на тот, что 22.03 21:19
Кстати, он тоже не оформлен. | |
|
|
|
|
|
|
|
для: winflip
(22.03.2009 в 14:58)
| | Немного поэксперементировав получил необходимое!
Спасибо всем участникам;) | |
|
|
|