el_tot93 Ответов: 3

Как изменить пароль справочный код


я получаю помощь от кого то но я не знаю как это сделать я уверен что это лучший способ сделать это но я не знаю как написать код любая помощь plzz
это мой логин-код
SqlDataAdapter sda = new SqlDataAdapter("select count(*)  from tbluser1 where username='" + txtusername.Text.Trim() + "' and password='" + txtpassword.Text.Trim() + "'", sqlcon);
        DataTable dtbl = new DataTable();
        sda.Fill(dtbl);



        if (dtbl.Rows[0][0].ToString() == "1")
        {
            SqlDataAdapter From_sda = new SqlDataAdapter("select user_id , username from tbluser1 where username='" + txtusername.Text.Trim() + "' and password='" + txtpassword.Text.Trim() + "'", sqlcon);
            DataTable From_ds = new DataTable();
            From_sda.Fill(From_ds);
            String value1 = From_ds.Rows[0][1].ToString();
            int id = int.Parse(From_ds.Rows[0][0].ToString());

            Debug.WriteLine("value is :   " + value1);
            Class1.Txtusername = txtusername.Text;
            this.Hide();
            SqlDataAdapter sda1 = new SqlDataAdapter("select role , [from], Take, from2, Take2, from3, Take3, from4, Take4 from tbluser1 where username='" + txtusername.Text.Trim() + "' and password='" + txtpassword.Text.Trim() + "'", sqlcon);
            DataTable ds = new DataTable();
            sda1.Fill(ds);
            Researcher obj = new Researcher(ds.Rows[0][0].ToString(), ds.Rows[0][1].ToString(), ds.Rows[0][2].ToString(), ds.Rows[0][3].ToString(), ds.Rows[0][4].ToString(), ds.Rows[0][5].ToString(), ds.Rows[0][6].ToString(), ds.Rows[0][7].ToString(), ds.Rows[0][8].ToString());
            this.Hide();
            obj.Show();
        }
        else
        {
            MessageBox.Show("please check your username and password");
        }


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

он сказал мне, что я должен это сделать
я так и делаю
Вам нужно иметь столбец "PasswordChangedDate" в таблице базы данных. Когда пользователь меняет пароль, установите для этого столбца значение current DateTime.

как я буду это кодировать
Когда пользователь входит в систему, проверьте, не превышает ли текущая дата "PasswordChangedDate" + 90 дни. Если true, то покажите экран PasswordReset пользователю, а когда пользователь отправит, установите "PasswordChangeDate" в CurrentDateTime. И так далее

3 Ответов

Рейтинг:
2

MadMyche

Прежде чем вы начнете добавлять в свое приложение; я бы хотел высоко рекомендую вам пересмотреть то, что у вас есть в данный момент.
Только в первых 3 строках кода я вижу несколько проблем: уязвимые, небезопасные и неэффективные. Я бы счел, что любой из первых двух является основанием для расторжения контракта.

Снижение уязвимости: чтобы уменьшить вероятность атак с использованием SQL-инъекций, я бы рекомендовал параметризация из всех твоих команд. Вот краткий пример, основанный на вашей первой строке:

string cmdtxt = "SELECT Count(*) FROM tbluser1 WHERE username=@username";
SqlCommand cmd = new SqlCommand(cmdtxt, sqlcon);
cmd.Parameters.AddWithValue("@username", txtusername.Text.Trim());

Укрепление безопасности: вы никогда не должны хранить пароли в обычном тексте. Вы должны реализовать какой-то метод хэширование их защищать. Однако это потребует гораздо большего, чем быстрый ответ. Я бы рекомендовал прочитать статьи здесь и в других местах по этой теме. Я работал с реализациями bCrypt и тоже счел бы это приемлемым.
Хранение паролей: как это сделать.[^]
Используйте BCrypt для хэширования ваших паролей: пример для C# и SQL Server « блог разработки программного обеспечения Роба крафта[^]

Кажется незначительным, но для повышения эффективности используйте самые простые объекты/методы, необходимые. Строка № 1 вашего скрипта создавала SqlDataAdapter, который подавал DataTable, а затем вы проверяли position [0][0] для одного значения в этом многомерном объекте. Ваша команда возвращает только 1 значение; никогда больше и никогда меньше. Если вы вернетесь в Уязвимость абзац вы увидите я изменил его на SqlCommand. Вы можете просто выполнить это как Скалярный функция, которая возвращает только одно значение
int Matches = (int)cmd.ExecuteScalar();


el_tot93

я пытаюсь сделать это сейчас

Рейтинг:
0

OriginalGriff

Когда вы задавали этот вопрос в прошлый раз: Как сделать так, чтобы срок действия пароля истек[^] Я предупреждал вас, что у вас есть более серьезные проблемы, которые вам нужно решить в первую очередь: SQL-инъекция и хранение паролей в открытом тексте.

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


el_tot93

Эй это приложение для windows никаких проблем

OriginalGriff

Конечно, это проблема! Или вы думаете, что "злодеи" есть только в интернете? Если вам нужны пароли, то вам нужна безопасность по какой - то причине-и это обеспечивает не только отсутствие безопасности, но и огромные дыры в безопасности, которые просто "истекающий пароль" не заткнет! Ну же, твой лучший друг попробует это просто чтобы увидеть выражение твоего лица ...

MadMyche

Эй, ваша БД-это гораздо больше, чем приложение Windows; любое другое приложение на компьютере или в сети имеет доступ ко всем вашим данным.
И комментарий "это не проблема" сам по себе является проблемой.

Рейтинг:
0

Patrice T

SqlDataAdapter("select count(*)  from tbluser1 where username='" + txtusername.Text.Trim() + "' and password='" + txtpassword.Text.Trim() + "'", sqlcon);

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


el_tot93

Эй это приложение для windows никаких проблем

Patrice T

Попробуйте зарегистрировать нового пользователя Брайан О'Коннер и вы увидите, что есть проблема.

el_tot93

извините за то что я новичок в этом и том способе который я знаю и у меня нет времени решать эту проблему или что то еще знаете у меня есть 3 выбора в моем коде я не знаю как это сделать

el_tot93

если у вас есть время сделайте один из них и я посмотрю как мне это сделать