В вашем коде нет дезинфекции пользовательского ввода, это необходимо в системе входа в систему, попробуйте это после формы входа в систему. info: Я не использую PDO, $ con - это соединение MYSQLI.
<?php
// Handle log in
if (isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];
// Sanitize username input
$username = strip_tags($username);
$username = trim($username);
$username = mysqli_real_escape_string($con, $username);
$username = urldecode($username);
// Sanitize password input
$password = strip_tags($password);
$password = trim($password);
$password = mysqli_real_escape_string($con, $password);
$password = urldecode($password);
}
?>
Ваш сайт должен быть настроен только на https, если игнорируется эта ссылка: htaccess перенаправляет на https://www, и вы должны предоставить либо безопасный сеансовый файл cookie, либо безопасный постоянный файл cookie для пользователей, которые могут успешно войти в систему. Код под этим абзацем должен быть в самом верху вашей страницы перед любым HTML. Этот пример относится к постоянному защищенному файлу https, связанному со временем, установленному в 1 день, после которого он истекаетВы можете использовать cookie-файлы сеанса, но я нахожу, что это раздражает людей, если они часто посещают ваш сайт, им не нужно повторять вход в тот же день, если они закрывают и снова открывают браузер или вкладку.
<?php
// All this code goes right at the top of your page before anything else!
function addcookie() {
global $condition;
if ($condition == "green") {
global $nameofcookie;
setrawcookie('loggedin', $nameofcookie, strtotime('+1 day'), '/', '', isset($_SERVER["HTTPS"]), true);
echo "<script>window.location.replace('https://example.com/mypage');</script>";
}
}
?>
Приведенный выше код установит безопасный cookie-файл с помощью функции, поскольку вы хотите, чтобы он запускался только после успешного входа в систему. Название куки действительно должно быть случайным и уникальным, что-то, основанное на микротайме, будет работать хорошо. Убедитесь, что это не что-то важное, что может идентифицировать пользователя! ВАЖНО: имя файла cookie для справки должно быть создано во время создания учетной записи и добавлено в таблицу пользователей, чтобы вы могли идентифицировать пользователей и представлять их учетные данные.
Стандартные меры безопасноститакже должна включать в себя отдельную таблицу ip, времени, даты и имени пользователя, который вошел в систему. Если ваш сайт занят, таблица заполняется быстро, поэтому вы можете настроить задание cron для очистки старых записей, чтобы уменьшить размер, в этом случаевам нужно будет добавить столбец для даты и времени, чтобы определить возраст записей.
Обработка входа в систему ...
<?php
$condition = "red";
if (isset($_POST['login'])) {
$select_login = "select * from Reg_User where username='$username' and password='$password'";
$connect_login = mysqli_query($con, $select_login);
$rows_login = mysqli_num_rows($connect_login);
if ($rows_login == 0) {
// code here to handle failed logins, I would record them and use a 3 strike method
}
// Handle successful logins, add cookie
else {
while ($row_login=mysqli_fetch_array($connect_login)) {
// Retrieve cookie name here from table
$nameofcookie=$row_login['cookie'];
$condition = "green"; // This allows you to add the cookie
addcookie();
}
}
}
?>
Получение cookie для аутентификации пользователей ...
<?php
if (isset($_COOKIE['loggedin'])) {
$cookie = $_COOKIE['loggedin'];
$select_authenticated_user = "select * from Reg_User where cookie='$cookie'";
$connect_authenticated_user = mysqli_query($con, $select_authenticated_user);
while ($row_authenticated_user=mysqli_fetch_array($connect_authenticated_user)) {
// Retrieve values here from table
$logged_in_user=$row_authenticated_user['username'];
$logged_in_admin=$row_authenticated_user['isadmin'];
// Resolve admin status
if ($logged_in_admin == TRUE) {
$type = "admin";
} else {
$type = "member";
}
}
// Echo statement for logged in user with admin or not status, you could change the echo to a variable name if you want to use this in a specific place on your page.
echo "Welcome $logged_in_user<br/>
Type: $type
";
}
?>
Вот ссылка для получения IP-адресов: Как получить IP-адрес клиента в PHP