1

Пишу потихоньку скрипт личного блога и добрался до админ панели. Очень хотелось бы узнать про уровень безопасности скрипта проверки формы аутентификации. Вот код:

<?php
session_start();
if(isset($_POST['log_on'])){//если были получены данные из формы
    function clean($value){
        $value = trim($value);//убираем лишние пробелы
        $value = strip_tags($value);//убираем html теги
        $value = htmlspecialchars($value);//заменяем спецсимволы
        return $value;
    }
    $_POST['login'] = clean($_POST['login']);
    $_POST['password'] = clean($_POST['password']);//чистим полученные данные
    include "../configs/config.php";//подключаем файл конфигурации
    $login = mysqli_query($connect, "SELECT * FROM `users` WHERE `id` = 1");
    $log = mysqli_fetch_assoc($login);//получаем данные из базы
    if($_POST['login'] == '' || $_POST['login'] != $log['login']){//сравниваем
      $_SESSION['error'] = 'Неправильный логин!';//отправляем сообщение через сессию
      header("Location:/administrator/index.php");//перенаправляем на страницу авторизации
      exit;
    }
    if($_POST['password'] == '' || $_POST['password'] != $log['password']){
      $_SESSION['error'] = 'Неправильный пароль!';
      header("Location:/administrator/index.php");
      exit;
    }
    if(empty($_SESSION['error'])){//если нет ошибок
      $_SESSION['login'] = true;
      header("Location:/administrator/admin.php");//направляем в панель администратора
    }
}
?>

Начал изучать PHP около месяца назад, прошу сильно не пинать

mymedia
  • 8,602
  • 1
    Используйте подготавливаемые запросы. а функцию clean удалите. и кстати, лучше не выводить, что был не верно введен логин, нужно говорить, просто данные не верно введены. – And Mar 08 '18 at 02:51
  • @And ЛУЧШЕ? Это в каком месте-то лучше? Все нормальные порталы информируют о неправильном либо логине либо пароле. Первое сделано для того чтобы юзер знал, есть ли его аккаунт вообще на сайте. – Manitikyl Mar 08 '18 at 06:27
  • А чем функция clean плоха? – Иван Mar 08 '18 at 13:22
  • @Иван, читайте https://ru.stackoverflow.com/q/637185/186083 А для вывода данных пришедших со стороны на сервер используйте htmlspecialchars() Полное описание тут http://php.net/manual/ru/function.htmlspecialchars.php Для настройки необходимы 2 и 3 параметры! – Visman Mar 08 '18 at 16:25
  • Скажем проще, хотя бы от новичков защитить? И дайте, пожалуйста ссылку, где про md5 объясняют более понятно, чем на php.su – Иван Mar 08 '18 at 22:21
  • @Иван, нет, не защитит. Новичок сейчас возьмет сканер уязвимостей, натравит его на вашу форму входа/сайт и получит результат. Для хеширования паролей не надо использовать md5(). Используйте password_hash() и password_verify(), которые специально созданы для этого. http://php.net/manual/ru/faq.passwords.php Бросайте программировать в режиме 20 века! Используйте современные возможности языка! – Visman Mar 09 '18 at 02:11
  • @Visman ты мне объясни конкретно в каком месте это правильно. Я прошу не путать Вас в дальнейшем связку "Логин и пароль" со связкой "Почта и пароль". – Manitikyl Mar 09 '18 at 03:23
  • @Visman хотя для обработки входных данных вы советуете использовать htmlspecialchars(), с вами не о чем дискутировать. Закрыли тему. – Manitikyl Mar 09 '18 at 03:49
  • @Visman тогда еще забыли про trim() и прочие функции фильтрации и экранизации строки. Это ничего не меняет. – Manitikyl Mar 09 '18 at 03:57
  • Я так понимаю что-то типа этого '; $password = $res['password']; $hash = password_hash($password, PASSWORD_DEFAULT); echo $hash.' это его хэш'; if(password_verify($password,$hash)){ echo '
    результат проверки: Верно'; }else{echo '
    результат проверки: Неверно';}; ?>
    – Иван Mar 10 '18 at 09:58

0 Answers0