Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
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
|
|
![]() |
|
|
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
|
|
|
|
22:03:2008, 08:06
|
|
Новенький ![]() Группа: Программист Сообщений: 3 Регистрация: 21:03:2008 Пользователь №: 16 072 Специализация: java, j2me Репутация: 0
|
Спасибо большое за дельный комментарий.
Пароли будут храниться в хэшах - пока для наглядности храню просто как есть (чтобы в phpmyadmin смотреть все таблицы напрямую). По поводу хитрых логинов-паролей - очень интересно, однако... скрипт не рушится 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
|
|
|
|
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
|
|
|
|
24:03:2008, 07:23
|
|
Новенький ![]() Группа: Программист Сообщений: 3 Регистрация: 21:03:2008 Пользователь №: 16 072 Специализация: java, j2me Репутация: 0
|
Ага, спасибо, буду копать.
Я понимаю, что в экранирования в моём коде не было, но тем не менее - код не рушился, и при echo $sql_statement выводил эту строку, где кем-то уже было заменено ' на \'. Остается только гадать, кем |
|
Сообщение
#5
|
|
|
|
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
|
|
![]() |
|
Текстовая версия | Сейчас: 17:05:2008 - 04:02 |