Насколько безопасна эта система входа? (Использование куки в PHP) - PullRequest
0 голосов
/ 30 апреля 2019

Я создал страницу входа и использую Cookies. Ниже приведен код для страницы входа в систему:

регистр
<?php
session_start();
if(isset($_POST['submitted'])){
$errors = array();
$mysqli = new mysqli('localhost', 'db123', 'db123', 'db123');
$username = $_POST['username'];
$result = $mysqli->query("SELECT * FROM registered_users WHERE phone_number = '$username'");
$data = mysqli_fetch_assoc($result);
if($result->num_rows == 0) {
     echo 'Username Not Found!';
} elseif($data['otp_verified'] === 'false'){
echo 'OTP Not Verified, Click Here To Verify Your Number';
}
else{
    $encryptpass=md5($_POST['password']);
    $cookie_username = $_POST['username'];
    if($encryptpass == $data['password']){
    echo 'Login Is Verified';
    $Month = 86400 + time(); 
     setcookie('user', $cookie_username, $Month);
    header("location:dashboard.php");
    }
    else{
    echo 'Login/Password Incorrect :(';
    }
}
$mysqli->close();   
}

?>

И, наконец, вот код для dashboard.php и всех других запрещенных страниц:

<?php
session_start();

if(!isset($_COOKIE['user']))
{
header("location:index.php");
die();
}
?>

Мои вопросы: 1. Насколько безопасна эта система входа? 2. Как я могу улучшить это? Заранее спасибо:)

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Вот неполный список проблем / решений:

  • Ваш код трудно читать, потому что он не имеет правильного отступа.
  • Вы должны использовать подготовленных государственных деятелейдля защиты от SQL-инъекций .
  • Вы даете подсказки хакерам, получая различные сообщения об ошибках.Когда имя пользователя правильное и пароль неправильный, вы говорите: «Логин / пароль неверный :(», но если имя пользователя неверное, вы говорите: «Имя пользователя не найдено!». Таким образом, хакер может узнать, правильно ли имя пользователя, иполовина работы выполнена.
  • Лучше не использовать md5() для шифрования пароля.
  • Использовать password_hash () для обработки паролей.
  • Несохраните имя пользователя в файле cookie. Опять же, вы теряете информацию.
  • Не используйте файлы cookie, просто нет необходимости делать это, используйте сеансы и храните информацию на сервере, а не на компьютере пользователя.
  • Вы, кажется, сохранили имена пользователей как phone_number. Так что же это? Это имя пользователя или номер телефона, это не может быть и другое. Даже если вы используете номера телефонов в качестве имен пользователей, позвоните имчто они.
  • Неряшливое кодирование: $errors = array(); нигде не используется. Вы не проверяете результат new mysqli(), соединение может не установиться. То же самое верно для $mysqli->query().
  • Вы стараетесь закрыть базу данных, ноn почему вы не публикуете результат запроса с $result->close();?Или сделайте и то, и другое, или ничего.

Безопасность - это сложная тема, действительно трудно понять ее правильно, а то, что сегодня хорошо, может быть плохо завтра.

0 голосов
/ 30 апреля 2019

Очень небезопасно

  • могут быть инъекции sql (потому что имя пользователя идет непосредственно к базе данных)
  • md5 устарел с года
  • Вы сохраняете имя пользователя незашифрованным
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...