Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> проверка логина-пароля по Mysql
Yankeppey
Вставить ник
сообщение 21:03:2008, 21:22
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 3
Регистрация: 21:03:2008
Пользователь №: 16 072
Специализация: java, j2me



Репутация: - 0 +


Имеется таблица users в базе данных db, в которой три столбца: id, user и password. Методом get скрипту передаются логин и пароль. Функция должна возвратить true, если пользователь с таким логином-паролем существует, false - если нет.
Сделал такой вариант на php:

function logon() {
global $SERVER, $USER, $PASSWORD, $DB;
$login = $_GET["login"];
$password = $_GET["password"];
$conn = new mysqli($SERVER,$USER,$PASSWORD,$DB);
if (!$conn) return false;
$sql_statement="
SELECT * FROM db.users
WHERE
user LIKE '".$login."'
AND
password LIKE '".$password."';
";
$result = mysqli_query($conn, $sql_statement);
$row = $result->fetch_array();
return $row;
}

В связке php+mysql не работал.
Интересует сам алгоритм проверки. Здесь я как возвращаемое значение послал сам массив $row, который не создастся, если в базе нет записи с таким именем-паролем. Все работает.
Интересует, есть ли какие-нибудь "классические", неформально принятые примеры проверки именя-пароля?
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 5)
Vovochka
Вставить ник
сообщение 21:03:2008, 23:05
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 198
Регистрация: 4:08:2006
Из: Vladivostok.pm
Пользователь №: 5 749
Специализация: Perl, Web



Репутация: - 4 +


При отправке пароля использовать POST + Ваш код забавен, попробуйте войти в систему с логином ' OR 1; --, а если в базе данных все разрешено для подключения, то логин '; TRUNCATE TABLE users; -- возымеет еще более интересное действие.

P.S. Да и пароли не хило было бы хранить в виде хешей.

Сообщение отредактировал Vovochka - 21:03:2008, 23:16
Подняться вверх 
 
Сообщение #2
Yankeppey
Вставить ник
сообщение 22:03:2008, 08:06
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 3
Регистрация: 21:03:2008
Пользователь №: 16 072
Специализация: java, j2me



Репутация: - 0 +


Спасибо большое за дельный комментарий.
Пароли будут храниться в хэшах - пока для наглядности храню просто как есть (чтобы в phpmyadmin смотреть все таблицы напрямую).
По поводу хитрых логинов-паролей - очень интересно, однако... скрипт не рушится smile.gif Кавычка ' воспринимается именно как символ кавычки \' :
SELECT * FROM db.users WHERE user LIKE '\' OR 1; --' AND password LIKE 'abc';

Или здесь дело в клиенте-отправщике запросов?
Ну и как избежать здесь потенциальной угрозы? Обрабатывать login и password разными средствами работы со строками вроде явной замены ' на \'?
Ещё вопрос. Чем POST лучше GET?
Запрос будет отправляться не из браузера, а из мобильника - в данном случае GET чем-то хуже POST? Проблем сделать POST нету (опять же, пока делаю get для наглядности), просто интересно.

Сообщение отредактировал Yankeppey - 22:03:2008, 08:08
Подняться вверх 
 
Сообщение #3
Vovochka
Вставить ник
сообщение 23:03:2008, 23:28
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 198
Регистрация: 4:08:2006
Из: Vladivostok.pm
Пользователь №: 5 749
Специализация: Perl, Web



Репутация: - 4 +


Именно что в приведенном вами варианте экранирования не было. символ ' сам не превращается в \'
На всякие подобные случае в php есть mysql_escape_string()

В браузерах GET не используеться при отправке паролей по причине безопасности. Ибо GET запрос сохраняется в истории браузера и в логах сервера.
Конечно POST тоже в логах находит свое отображение, но в таком случае мы не увидим параметров запроса.
Что будет честнее по отношению к пользователю.

Сообщение отредактировал Vovochka - 23:03:2008, 23:33
Подняться вверх 
 
Сообщение #4
Yankeppey
Вставить ник
сообщение 24:03:2008, 07:23
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 3
Регистрация: 21:03:2008
Пользователь №: 16 072
Специализация: java, j2me



Репутация: - 0 +


Ага, спасибо, буду копать.
Я понимаю, что в экранирования в моём коде не было, но тем не менее - код не рушился, и при
echo $sql_statement
выводил эту строку, где кем-то уже было заменено ' на \'. Остается только гадать, кем smile.gif
Подняться вверх 
 
Сообщение #5
GOsha
Вставить ник
сообщение 4:05:2008, 19:11
Цитата Ответить 


Гуру
***

Группа: Достойный программист
Сообщений: 305
Регистрация: 19:01:2005
Из: Просторы интернета
Пользователь №: 1 258
Специализация: PHP, MySQL - Programming



Репутация: - 2 +


Вон nws че-та на эту тему накарябал:
http://forum.codeby.net/ipb.html?s=&sh...st&p=105948
Подняться вверх 
 
Сообщение #6


Ответить  Новая тема 

 

RSS Текстовая версия Сейчас: 17:05:2008 - 04:02
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net