Mrunal Pawar Ответов: 2

Страница входа capslock ошибка нечувствительна к регистру


Привет..

У меня есть страница входа в систему asp.net c#, который содержит два текстовых поля
Имя пользователя :
Пароль :

В моей базе данных я сохранил имя пользователя и пароль как
admin и admin соответственно в нижнем регистре..


Когда я ввожу имя пользователя как admin и пароль как admin в текстовых полях...
Он успешно входит в систему

Однако я попытался войти
Имя пользователя как администратор
И
Пароль от имени администратора

В Capslock т. е.
Он все еще успешно вошел в систему...

Я хочу, чтобы регистр, введенный в текстовые поля, совпадал с регистром имени пользователя и пароля, хранящихся в базе данных

Как сделать имя пользователя и пароль чувствительными к регистру?.

Что я уже пробовал:

Моя страница Login.aspx.cs имеет следующий код

protected void Loginbtn_Click(object sender, EventArgs e)
   {
       con.Open();

           SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM NEWADMIN WHERE admin_username='" + username.Text + "' AND admin_password='" + Password.Text + "'", con);
           int a = Convert.ToInt32(cmd.ExecuteScalar());

           SqlCommand cmd1 = new SqlCommand("SELECT admin_id FROM NEWADMIN WHERE admin_username='" + username.Text + "'", con);
           Session["admin_id"] = cmd1.ExecuteScalar();
           if (a >= 1)
           {
               Response.Redirect("Homepage.aspx");
           }

       con.Close();




   }

Michael_Davies

Мы не можем сказать, что происходит, показать код, о котором идет речь.

Mrunal Pawar

привет..
Я включил код в этот вопрос.
Пожалуйста, скажите мне, что делать
Спасибо

ZurdoDev

У нас нет возможности узнать это, так как мы не можем видеть ваш код. Если ваш пароль хранится в виде обычного текста, то просто используйте инструкцию сортировки SQL для обеспечения чувствительности к регистру.

Mrunal Pawar

Я читал об этом решении для изменения параметров сортировки в sql server, но не понимал, как это сделать..
как я должен использовать инструкцию сортировки SQL для обеспечения чувствительности к регистру?
Заранее спасибо

ZurdoDev

Выберите столбец 1
Из Табл. 1
Где Column1 COLLATE Latin1_General_CS_AS = 'casesensitivesearch'

2 Ответов

Рейтинг:
20

Bryian Tan

Есть несколько вещей, которые вы можете сделать.
1. Следуйте указаниям @RyanDev, используйте параметры сортировки с учетом регистра для сравнения строки.

SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM NEWADMIN WHERE admin_username COLLATE Latin1_General_CS_AS='" + username.Text + "' AND admin_password COLLATE Latin1_General_CS_AS='" + Password.Text + "'", con);

Как выполнить поиск с учетом регистра в предложении WHERE (я использую SQL Server)? - переполнение стека[^]

Как только вы получите #1 для работы, ваш дух кодирования поднимется и начнет исследовать следующее.

2. Измените таблицу измените параметры сортировки столбцов)

SQL-сервер - сортировка - регистр SQL-запрос поиска - Путешествие в SQL орган пинал Дэйв[^]

3. Используйте параметризованный запрос в коде, чтобы минимизировать возможность SQL-инъекции

Как выполнить параметризованный запрос[^]

4. уважайте пользовательские данные. Следуйте предложение от @hdnjith, шифрования и хеширования, пароль

Соленое хеширование паролей - все правильно[^]


Рейтинг:
10

Nayanajith Karunarathna

Скорее всего, вам придется изменить способ сохранения вашего имени пользователя/пароля.
вы использовали какой-либо метод шифрования пароля? если нет попробуйте ниже,

создайте столбец в таблице для хранения пароля и установите его тип данных varbinary(500)

если вы используете хранимую процедуру для сохранения ваших данных, вы можете сохранить пароль, зашифровав его, как показано ниже,

DECLARE @Plaintext nvarchar(500)
SET @Plaintext = @in_Password
set @Plaintext = HashBytes('MD5', @Plaintext)


@in_Password - это поле пароля, которое вы предоставляете. и вставьте его как

INSERT INTO Users
           (Password)
     VALUES
           (@Plaintext)

ОПЕРАЦИОННАЯ

INSERT INTO Users
           (Password)
     VALUES
           (HashBytes('MD5', @in_Password)


в событии входа пользователя сравните пароль как

SELECT * FROM User
WHERE UserName=@UserName
AND password=HashBytes('MD5', @password)