PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
pabet
Отправлено: 06 Декабря, 2011 - 19:32:12
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Дек. 2011
Помог: 0 раз(а)
Здравствуйте! У меня проблемы с кодом авторизации, при вводе верного логина и верного пароля войти нельзя, но почему-то при вводе верного логина и не верного пароля войти можно, даже если не ввести пароль можно войти, подскажите в чем ошибка?
CODE (
htmlphp ):
скопировать код в буфер обмена
<? php
$username = $_POST [ 'username' ] ;
$password = $_POST [ 'password' ] ;
$result = mysql_query ( "SELECT login,password1 FROM users WHERE login='$username '" ) ; if ( ( strcasecmp ( $username , $myrow [ 'login' ] ) == 0) && ( strcmp ( $password , $myrow [ 'password1' ] ) == 0) ) {
$_SESSION [ 'username' ] = $username ;
$_SESSION [ 'password' ] = $password ;
}
?>
(Отредактировано автором: 06 Декабря, 2011 - 19:38:26)
sKaa
Отправлено: 06 Декабря, 2011 - 19:44:53
Частый посетитель
Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011
Откуда: Россия г. Нижний Новгород
Помог: 25 раз(а)
[+]
PHP:
скопировать код в буфер обмена
<?PHP
$username = $_POST [ 'username' ] ;
$password = $_POST [ 'password' ] ;
$result = mysql_query ( "SELECT login,password1 FROM users WHERE login='$username '" ) ;
if ( ! empty ( $password ) && $myrow [ 'password1' ] == $password ) ) {
$_SESSION [ 'username' ] = $username ;
$_SESSION [ 'password' ] = $password ;
header ( "Location: $_SERVER ['REQUEST_URI']" ) ; }
?>
У тебя ещё помойму синтаксическая ошибка в $_SERVER[REQUEST_URI]";
pabet
Отправлено: 06 Декабря, 2011 - 19:56:21
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Дек. 2011
Помог: 0 раз(а)
Самогонщик пишет: Что содержит $myrow['password1'] ?
В ней хранится пароль, который пользователь ввел при регистрации!
Самогонщик пишет: Довольно странно проверять логин, если по нему делался поиск в базе.
Получится не очень хорошо, если введённого логина не будет существовать.
Как-то не подумал насчет этого, но ошибка не в этом!
Даже если логина нет в базе ничего не произойдет!
Самогонщик пишет: Кстати, в коде есть эскуэл-иньекция.
Что?
Microteam
Отправлено: 06 Декабря, 2011 - 20:47:08
Гость
Покинул форум
Сообщений всего: 67
Дата рег-ции: Дек. 2011
Помог: 0 раз(а)
Самогонщик пишет: Кстати, в коде есть эскуэл-иньекция.
SQL инъекция это плохо, а так работает?:
PHP:
скопировать код в буфер обмена
<?PHP
$username = $_POST [ 'username' ] ;
$password = $_POST [ 'password' ] ;
if ( ! $password || ! $username ) die ( "Поля немогут быть пустыми" ) ;
$result = mysql_query ( "SELECT login,password1 FROM users WHERE login='$username '" ) ;
{
$_SESSION [ 'username' ] = $username ;
$_SESSION [ 'password' ] = $password ;
}
?>
(Отредактировано автором: 06 Декабря, 2011 - 20:50:42)
-----int i = 6; ++i + i++ = ?
pabet
Отправлено: 06 Декабря, 2011 - 20:54:21
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Дек. 2011
Помог: 0 раз(а)
Microteam пишет: а так работает?:
Нет!
(Добавление)
[quote=pabet]Здравствуйте! У меня проблемы с кодом авторизации, почему-то при вводе верного логина и не верного пароля можно войти, даже если не ввести пароль можно войти, подскажите в чем ошибка?
CODE (
htmlphp ):
скопировать код в буфер обмена
<? php
$username = $_POST [ 'username' ] ;
$password = $_POST [ 'password' ] ;
$result = mysql_query ( "SELECT login,password1 FROM users WHERE login='$username '" ) ; if ( ( strcasecmp ( $username , $myrow [ 'login' ] ) == 0) && ( strcmp ( $password , $myrow [ 'password1' ] ) == 0) ) {
$_SESSION [ 'username' ] = $username ;
$_SESSION [ 'password' ] = $password ;
}
?>
[/quote]
(Добавление)
[quote=pabet]Microteam пишет: а так работает?:
Нет!
Bio man
Отправлено: 06 Декабря, 2011 - 22:58:37
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010
Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
попробуйте отладить.
напишите перед ?>
PHP:
скопировать код в буфер обмена
echo '<table border=1><tr><td><b>Массив $_POST</b></td><td><b>Это моя выборка из БД</b></td></tr><tr><td><pre>' ;
echo '</pre></td><td><pre>' ;
echo '</pre></td></tr><tr><td><b>strcmp($password, $myrow[\'password1\']) ==</b></td><td>' . strcmp ( $password , $myrow [ 'password1' ] ) . '</td></tr></table>' ;
Sveta
Отправлено: 07 Декабря, 2011 - 11:35:39
Новичок
Покинул форум
Сообщений всего: 33
Дата рег-ции: Май 2011
Помог: 0 раз(а)
Я сессии не использовала, но делала так и у меня работает.
PHP:
скопировать код в буфер обмена
<?PHP
// Страница авторизации
# Функция для генерации случайной строки
function generateCode( $length = 6) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789" ;
$code = "" ;
while ( strlen ( $code ) < $length ) { }
return $code ;
}
# Соединямся с БД
include_once ( "O:/home/localhost/www/db/www/podkluchenie.php" ) ;
if ( isset ( $_POST [ 'submit' ] ) ) {
# Вытаскиваем из БД запись, у которой логин равняеться введенному
# Сравниваем пароли
if ( $data [ 'password' ] === md5 ( md5 ( $_POST [ 'password' ] ) ) ) {
# Генерируем случайное число и шифруем его
$hash = md5 ( generateCode
( 10
) ) ;
if ( !@ $_POST [ 'not_attach_ip' ] )
{
# Если пользователя выбрал привязку к IP
# Переводим IP в строку
$insip = ", ip=INET_ATON('" . $_SERVER [ 'REMOTE_ADDR' ] . "')" ;
}
# Записываем в БД новый хеш авторизации и IP
mysql_query ( "UPDATE users SET hash='" . $hash . "' " . $insip . " WHERE id_u='" . $data [ 'id_u' ] . "'" ) ;
# Ставим куки
# Переадресовываем браузер на страницу проверки нашего скрипта
header ( "Location: [страница куда надо перейти после авторизации].php" ) ; exit ( ) ; }
else
{
print "Вы ввели неправильный логин/пароль" ;
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<form method="POST">
Логин</td>
<td><input name="login" type="text"><br></td></tr>
<tr><td> Пароль</td> <td> <input name="password" type="password"><br></td></tr>
<tr><td>Не прикреплять к IP (не безопасно)</td> <td> <input type="checkbox" name="not_attach_ip"><br></td><tr>
<tr><td width="140 px"><input name="submit" type="submit" value="Войти">
</form></td></tr></table>
</body>
</html>
для этого нужна таблица в бд с пользователями (у меня таблица users), в которой есть поля id,login,password,hash,ip.
А на странице, на которую ты переходишь, должна быть проверка
PHP:
скопировать код в буфер обмена
<?PHP
// Скрипт проверки
# Соединямся с БД
if ( isset ( $_COOKIE [ 'id' ] ) and
isset ( $_COOKIE [ 'hash' ] ) ) {
$query = mysql_query ( "SELECT *,INET_NTOA(ip) AS ip FROM users WHERE id_u = '" . intval ( $_COOKIE [ 'id' ] ) . "' LIMIT 1" ) ;
if ( ( $userdata [ 'hash' ] !== $_COOKIE [ 'hash' ] ) or ( $userdata [ 'id_u' ] !== $_COOKIE [ 'id' ] )
or ( ( $userdata [ 'ip' ] !== $_SERVER [ 'REMOTE_ADDR' ] ) and ( $userdata [ 'ip' ] !== "0" ) ) )
{
print "Хм, что-то не получилось" ;
}
else
{
print "Привет, " . $userdata [ 'login' ] . ". Всё работает!" ;
}
}
else
{
print "Включите куки" ;
}
?>
Естественно у тебя должны быть свои названия полей(Отредактировано автором: 07 Декабря, 2011 - 11:37:58)
pabet
Отправлено: 07 Декабря, 2011 - 12:57:52
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Дек. 2011
Помог: 0 раз(а)
Bio man пишет: попробуйте отладить.
Хм, странно, если ввести пароль правильно, то появляется 0, а если его не ввести или ввести не правильно, тогда появляются числа от -1 до -5, почему if считает это условие истинным?
Maxi пишет: А ты сессию вообще где-нибуть инициализировал?
Эти сессии или сессии вообще?
Bio man
Отправлено: 07 Декабря, 2011 - 15:40:40
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010
Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
pabet пишет: почему if считает это условие истинным?
все что не 0 - true (не считая других типов данных) пробуй
pabet пишет: Эти сессии или сессии вообще?
session_start();
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB