проверка логина-пароля по Mysql

Тема в разделе "Общие вопросы", создана пользователем Yankeppey, 22 мар 2008.

Статус темы:
Закрыта.
  1. Yankeppey

    Yankeppey Гость

    Имеется таблица 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, который не создастся, если в базе нет записи с таким именем-паролем. Все работает.
    Интересует, есть ли какие-нибудь "классические", неформально принятые примеры проверки именя-пароля?
     
  2. Vovochka

    Vovochka Гость

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

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

    Yankeppey Гость

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

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

    Vovochka Гость

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

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

    Yankeppey Гость

    Ага, спасибо, буду копать.
    Я понимаю, что в экранирования в моём коде не было, но тем не менее - код не рушился, и при
    echo $sql_statement
    выводил эту строку, где кем-то уже было заменено ' на \'. Остается только гадать, кем :rolleyes:
     
  6. GOsha

    GOsha Гость

Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей