Почему моя функция входа позволяет пользователям входить со случайным паролем? - PullRequest
0 голосов
/ 28 января 2020

У меня маленькая проблема. Мой сценарий позволяет пользователям войти в систему со случайным паролем. Как я могу это исправить? Вот вся информация: пароли хранятся в MySQL DB V8, и они правильно шифруются с помощью BCrypt.

Bcrypt Code:

    private static string GetRandomSalt()
{
    return BCrypt.Net.BCrypt.GenerateSalt(10);
}

public static string HashPassword(string password)
{
    return BCrypt.Net.BCrypt.HashPassword(password, GetRandomSalt());
}

public static bool ValidatePassword(string username, string password)
{
    return BCrypt.Net.BCrypt.Verify(username, password);
}

Это мой код, в котором я получил проблему:

[RemoteEvent("loginUser")]
public void loginUserEvent(Client player, String username, String password)
{

    if (player.HasData("waitLogando"))
    {
        player.SendNotification("Wait...");
        return;
    }
    player.SetData("waitLogando", true);
    using (MySqlConnection Mainpipeline = new MySqlConnection(Main.myConnectionString))
    {
        Mainpipeline.Open();
        MySqlCommand query = Mainpipeline.CreateCommand();
        query.CommandType = CommandType.Text;
        query.CommandText = "SELECT * FROM `users` WHERE ( `Username` = '" + username + "' OR `email` = '" + username + "')";
        query.ExecuteNonQuery();

        DataTable dt = new DataTable();
        using (MySqlDataAdapter da = new MySqlDataAdapter(query))
        {

            da.Fill(dt);

            int i = 0;
            i = Convert.ToInt32(dt.Rows.Count.ToString());
            if (i == 0)
            {
                string query2 = "SELECT * FROM users (username, password) VALUES (@username, @password)";

                MySqlCommand LoginAccount = new MySqlCommand(query2, Mainpipeline);

                LoginAccount.Parameters.AddWithValue("@username", "" + username + "");
                LoginAccount.Parameters.AddWithValue("@password", "" + AccountManage.ValidatePassword(username, password) + "");
                LoginAccount.ExecuteNonQuery();

                player.SendNotification("Wrong password");
                player.ResetData("waitLogando");
            }
            else
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "clearLoginWindow");
                AccountManage.LoadAccount(player, username);
                player.ResetData("waitLogando");
            }
        }
    }
}

Я очень надеюсь, что вы мне поможете, спасибо за ваше время! Если вам нужна дополнительная информация, я здесь.

1 Ответ

0 голосов
/ 28 января 2020

Вы не проверяете пароль в первом запросе, вы проверяете только имя пользователя или адрес электронной почты.

Ах, запрос2 также неверен (вы имели в виду INSERT вместо SELECT?).

...