Я создаю базовую систему аутентификации php для моего веб-проекта. Я просто хочу спросить, является ли это безопасным, потому что я просто беспокоюсь о перехвате сеанса и проблемах внедрения SQL. Код ниже.
поле формы пользователя содержит имя поля user_email для электронной почты и имя поля пароля для пароля
PHP user validation code
<?php
session_start();
// // check if user session is set or not
if(isset($_SESSION['user'])){
// session is set redirect to user home
header('Location: appointments.php');
}
// // checking if request method is post
if( $_SERVER['REQUEST_METHOD'] === "POST" ){
if(isset($_POST['user_email']) && isset($_POST['password']) ){
// including database file for database connection
include 'database_connection.php';
$stmt = $conn->prepare("SELECT * FROM user WHERE email = ? AND password = ?");
$stmt->execute([ $_POST['user_email'] , $_POST['password'] ]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if( $stmt->rowCount() > 0 ){
$_SESSION['user'] = $result['first_name'];
$_SESSION['user_first_name'] = $result['first_name'];
$_SESSION['user_last_name'] = $result['last_name'];
$_SESSION['user_email'] = $result['email'];
$_SESSION['user_contact'] = $result['contact'];
header('Location: user_appoinment_application.php');
die();
}
else{
header('Location: appointments.php');
die();
}
}
else{
header('Location: appointments.php');
die();
}}
// request method get
else{
header('Location: appointments.php');
}
для проверки авторизован ли пользователь на определенных страницах, я поставил следующий код для проверки, пользователь вошел в систему или нет в верхней части страницы
session_start();
// checking the user is logged in or not
if(!isset($_SESSION['user_first_name'])){
// session is set redirect to doctor home
header('Location: appointments.php');
}
Я знаю, что для предотвращения атак с использованием SQL-инъекций используются подготовленные SQL-операторы, но я не знаю, как предотвратить перехват сеансов. Теперь я просто хочу знать, что приведенный выше код безопасен или нет. заранее спасибо
Чтобы обезопасить себя от перехвата сеанса, необходимо знать о нескольких вещах.
Захват стороны сессии
Именно здесь в сети используется анализатор пакетов для мониторинга сетевой активности, мы можем сосредоточиться на обмене данными между двумя сторонами и надеемся таким образом украсть куки-файл сеанса. Этого можно избежать, включив SSL повсюду на сайте. Некоторые люди используют SSL только для аутентификации на сайте. Это не достаточно хорошо, это должно быть везде на сайте.
Фиксация сессии
Это происходит, когда веб-сайт принимает идентификаторы безопасности в URL-адресе или через данные POST. Злонамеренный пользователь может установить идентификатор сеанса, обычно отправляя электронное письмо жертве с выбранным им SID в URL-адресе. т.е. http://example.com/?SID=I_WILL_GET_YOUR_ID . Теперь злоумышленник просто ждет, пока жертва щелкнет ссылку, отправленную ему / ей, и как только злоумышленник войдет в систему, злоумышленник может использовать вышеупомянутый URL для взлома сеанса.
Межсайтовый скриптинг
Злоумышленник обманом заставляет жертву запускать код, который, по-видимому, принадлежит серверу, что позволяет злонамеренному пользователю писать определенный код для кражи cookie сеанса.
Заключение
С одной стороны, использование SSL на всем сайте предотвратит угон сеансов. Другая часть, с которой вам следует быть осторожным, это эксплойты XSS. Я рекомендую посмотреть на https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
поскольку у него есть хороший контрольный список вещей, о которых стоит подумать при написании клиентского кода.
Надеюсь, это поможет.
Других решений пока нет …