Я только что обнаружил довольно серьезную уязвимость в моем коде во время некоторого тестирования,
В основном, если мое имя пользователя было «admin», а пароль - «12345» ... и пользователь присоединился и выбралимя «Администратор» и тот же пароль «12345», когда он / она входит в систему, они будут в моей учетной записи на сайте. Как вы можете себе представить, я создал целый недостаток, поскольку это затронет каждого потенциального пользователя на сайте.
Итак, мой вопрос в том, что я могу изменить в этом операторе, чтобы он проверял совпадение EXACT.
WHERE login_name ='$user' AND user_password ='$pass' LIMIT 1";
Вот файл login_process.php
<?php
require_once("includes/session.php");
$connection = mysql_connect("localhost", "user", "password");
if(!$connection)
{
die("Database connection failed: " . mysql_error());
}
$db_select = mysql_select_db("game", $connection);
if(!$db_select)
{
die("Database selection failed: " . mysql_error());
}
$user = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['password']);
$pass = sha1($pass);
// Need to make a change to the below query, as it doesn't match for case sensitivity.
$query = "SELECT user_id, user_name, user_level FROM users WHERE login_name ='$user' AND user_password ='$pass' LIMIT 1";
$result=mysql_query($query);
if(mysql_num_rows($result) == 1)
{
$found_user = mysql_fetch_array($result);
$_SESSION['user_id'] = $found_user['user_id'];
$_SESSION['user_name'] = $found_user['user_name'];
$_SESSION['user_level'] = $found_user['user_level'];
header("Location: index.php");
}
else
{
echo "The username or password you entered was incorrect. <br/> Please click <a href='login.php'>Here</a> to try again.";
}
?>