У меня очень неприятная проблема с очень простым скриптом входа в PHP. Проблема в том, что логин работает даже с неправильным именем пользователя и/или паролем. Я запускаю его в XAMPP 7.0.8 для Linux. Кстати, таблица «пользователи» базы данных «login» имеет только одну строку.Вход в PHP работает с неправильным именем пользователя и паролем
Я пытался понять, как работают эти сценарии, поэтому я попытался с помощью самого элементарного входа в систему. Но для меня это остается загадкой, и теперь я никогда не мог заставить ее работать.
Вот PHP часть:
<?php
session_start();
if(isset($_POST['login'])) {
$db = mysqli_connect("localhost", "root", "", "login");
$username = strip_tags($_POST['username']);
$password = strip_tags($_POST['password']);
$username = stripcslashes($username);
$password = stripcslashes($password);
$username = mysqli_real_escape_string($username);
$password = mysqli_real_escape_string($password);
$sql = "SELECT * FROM users WHERE username = '$username' LIMIT 1";
$query = mysqli_query($db, $sql);
$row = mysqli_fetch_array($query);
$id = $row['id'];
$db_password = $row['password'];
if($password == $db_password){
$_SESSION['username'] = $username;
$_SESSION['id'] = $id;
header("Location: index.php");
} else {
echo "Error: the information is not correct.";
}
}
?>
А вот HTML форма:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Client's area</title>
</head>
<body>
<form method="post" action="">
<input type="text" name="username">
<input type="password" name="password">
<input class="login" type="submit" name="login" value="Login">
</form>
</body>
</html>
Edit: идея этого поста никогда не пытался сделать безопасный сценарий входа в систему, его был предназначен для понимания некоторых функций PHP. Я признаю, что небезопасно использовать какую-либо часть этого кода для фактического проекта входа.
пожалуйста, не магазин обычного тексту PASSW ord в вашей базе данных. Используйте хеширование паролей. PHP предоставляет ['password_hash()'] (http://php.net/manual/en/function.password-hash.php) и ['password_verify()'] (http://php.net/manual/ ru/function.password-verify.php), пожалуйста, используйте их. И вот некоторые [хорошие идеи о паролях] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) Если вы используете версию PHP до 5.5 [имеется пакет совместимости, доступный здесь] (https : //github.com/ircmaxell/password_compat) – RiggsFolly
Ваш скрипт подвержен риску [SQL Injection Attack] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php) Посмотрите, что случилось с [Little Bobby Tables] (http://bobby-tables.com/) Даже [если вы избегаете входных данных, это небезопасно!] (http://stackoverflow.com/ Вопросы/5741187/sql-injection-that-gets-around-mysql-real-escape-string) Используйте [подготовленные параметризованные утверждения] (http://php.net/manual/en/mysqli.quickstart.prepared-statements. php) – RiggsFolly
Это действительно неудачная система входа в систему, вы храните пароли как pl ain, пожалуйста, выйдите и найдите другое учебное пособие, в котором будут использоваться PDO и 'password_hash' http://php.net/manual/en/function.password-hash.php – cmorrissey