|
|
|
| У меня следующая проблема по блоку:
1. Не используйте проверку на возращение строки (mysql_num_rows()), а применяйте следующий подход:
<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql = "SELECT user, pass FROM users WHERE user = '$user'";
list($m_user, $m_pass) = mysql_fetch_row( mysql_query($sql) );
if ( $pass != $m_pass or // даст TRUE, если пароли не равны
$user != $m_user // данная проверка даст TRUE, если была sql инъекция
)
{
die("die");
}
?>
|
Я так полагаю, переменные $m_user и $m_pass должны содержать имя пользователя и пароль из базы данных. В последствии их сравнивают с логином и паролем, переданным из предыдущей формы.
У меня же почему то $m_user и $m_pass пустые - не содержат ничего, и поэтому всегда выводится сообщение, что пароль указан неверно. | |
|
|
|
|
|
|
|
для: Veli
(21.08.2006 в 07:14)
| | Вы уверены, что вводите данные существующего юзера?
Можете показать структуру таблицы и данные?
P.S. Приведенный вами код содержит SQL-Injection.
Чтобы исправить это, вам следует переменную $user обработать функцией mysql_escape_string()
То есть получится:
$sql = "SELECT user, pass FROM users WHERE user = '".mysql_escape_string($user)."'";
|
to cheops: я думаю стоит исправить код в статье :) а то статья про безопасное программирование, содержит SQL-Injection :) | |
|
|
|
|
|
|
|
для: JIEXA
(21.08.2006 в 09:32)
| | Как показать структуру таблицы и данные? | |
|
|
|
|
|
|
|
для: Veli
(21.08.2006 в 10:55)
| | попробуйте вывести переменные
echo $user . " " . $pass;
|
| |
|
|
|
|
|
|
|
для: Veli
(21.08.2006 в 10:55)
| | У вас phpMyAdmin есть? В нем есть ссылочка "экспорт"... | |
|
|
|
|
|
|
|
для: JIEXA
(21.08.2006 в 09:32)
| | Она её не содержит. Она её предусматривает.
Метод защиты, конечно, ортопедический, но раз автору нравится... | |
|
|
|
|
|
|
|
для: Trianon
(21.08.2006 в 11:15)
| | Ну да, всмысле предусматривает :) | |
|
|
|
|
|
|
|
для: JIEXA
(21.08.2006 в 11:20)
| | Вот, пожалуйста.
-- Структура таблицы `logins`
--
CREATE TABLE `logins` (
`id` tinyint(11) NOT NULL default '0',
`login` tinytext NOT NULL,
`pass` tinytext NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
--
-- Дамп данных таблицы `logins`
--
INSERT INTO `logins` VALUES (1, 'мой_логин', 'мой_пароль'); | |
|
|
|
|
|
|
|
для: Veli
(22.08.2006 в 06:13)
| | Очень советую сперва отработать латинские логины и пароли, а потом уже проверять русские. | |
|
|
|
|
|
|
|
для: Trianon
(22.08.2006 в 09:39)
| | Да здесь были латинские, это просто я вписал, как для примера! | |
|
|
|
|
|
|
|
для: Veli
(22.08.2006 в 10:39)
| | Вопрос завис в воздухе. Весь день просидел, не могу сообразить, в чем ошибка! | |
|
|
|
|
|
|
|
для: Veli
(22.08.2006 в 12:54)
| | Вопрос завис в воздухе. Весь день просидел, не могу сообразить, в чем ошибка! | |
|
|
|
|
|
|
|
для: Veli
(23.08.2006 в 04:13)
| | Вопрос завис в воздухе. Весь день просидел, не могу сообразить, в чем ошибка! | |
|
|
|
|
|
|
|
для: Loki
(23.08.2006 в 10:18)
| | Зачем повторять мою фразу? | |
|
|
|
|
|
|
|
для: Veli
(24.08.2006 в 15:05)
| | тип столбцов поменяйте на varchar для начала | |
|
|
|
|
|
|
|
для: Veli
(21.08.2006 в 07:14)
| | Может я чего-то не знаю, но мне не понятно, почему нельзя использовать проверку на возращение строки mysql_num_rows? | |
|
|
|
|
|
|
|
для: komex
(21.08.2006 в 12:15)
| | Потому, чо при определенном запросе (атака по твоему коду) mysql_num_rows вернет результат, хотя такого пароля и логина не будет в БД. | |
|
|
|