tusharkaushik Ответов: 4

Состояние входа в систему не удалось


Я написал приложение для входа в систему с помощью сеанса на языке c# asp.net .
но вместо того, чтобы перейти на страницу приветствия. сообщение "вход пользователя sa не удался".
Логика бизнеса, стоящая за домом.aspx:
try
        {
            conn = new SqlConnection("Data Source=LENOVO;Initial Catalog=sample;User ID=sa;Password=***********");
            conn.Open();
            Response.Write("connection to databaase is established");
            String query = "select count(*) from tblRegister where name='" + txtuser.Text + "'and Password'" + txtpass.Text + "'";
            cmd = new SqlCommand(query, conn);
            String output = cmd.ExecuteScalar().ToString();
            if (output == "1")
            {
                Session["user"] = txtuser.Text;
                Response.Redirect("~/Welcome.aspx");
            }
            else
            {
                Response.Write("Login failed");

            }
        }
        catch (Exception ex)
        {
            Response.Write("sorry" + ex.Message + "\n");
            Response.Write(ex.HelpLink);
            //Response.Write(ex.InnerException);
        }
        finally
        {
            conn.Close();
            Response.Write("Connection closed");
        }
    }
}


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

Я уже пробовал это сделать:
String query = "select * from tblRegister where name='" + txtuser.Text + "'and Password'" + txtpass.Text + "'";

tusharkaushik

Я пробовал, но результат все равно нулевой

Richard Deeming

И почему вы заново изобретаете колесо? ASP.NET имеет несколько совершенно хороших встроенных систем аутентификации - например, Личность ASP.NET [^]

Richard Deeming

Да, и я чуть не забыл: заявки должны быть НИКОГДА* подключитесь к базе данных как sa Это неограниченная учетная запись, которая может быть использована для уничтожения вашей базы данных, вашего сервера или даже вашей сети (в зависимости от того, как настроен SQL).

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

* Единственным исключением будет приложение, предназначенное для репликации частей SQL Server Management Studio, которые, очевидно, должны быть заблокированы как можно более плотно. И даже тогда я бы все равно рекомендовал использовать конкретную учетную запись в sysadmin роль, а не то, что sa счет.

4 Ответов

Рейтинг:
35

Patrice T

String query = "select count(*) from tblRegister where name='" + txtuser.Text + "'and Password'" + txtpass.Text + "'";

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


Рейтинг:
27

Chander Parkash Mourya

Привет,

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

String query = "select * from tblRegister where name='" + txtuser.Text + "'and Password = '" + txtpass.Text + "'";


Вы пропустили знак равенства (=) после поля пароля.


Рейтинг:
15

F-ES Sitecore

Строка подключения

Data Source=LENOVO;Initial Catalog=sample;User ID=sa;Password=***********


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


tusharkaushik

но я должен войти в систему с учетными данными, которые хранятся в таблице tblregister в образце базы данных

Рейтинг:
11

Member 11291923

1.проверьте подключение к базе данных.
файл веб-конфигурации

<add name="CONNECT" connectionString="Data Source=TIS3-PC;Initial Catalog=Cashew;User Id=sa;Password=1234;" providerName="Sql.Data.SqlClient"/>

С#
SqlConnection cs = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["CONNECT"].ConnectionString);


tusharkaushik

Сэр я изменил код :
Теперь это мой код :

охраняемых недействительными btnInput_Click(объект отправителя, EventArgs в электронной)
{
пробовать
{
conn = new SqlConnection("источник данных=LENOVO;начальный каталог=образец;идентификатор пользователя=sa;пароль=***********");

Ответ.Write("установлено соединение с базой данных");
строка запроса = "выбрать email_ID,pswd от входа, где email_ID=@email_ID и pswd=@pswd";
команду cmd = новый sqlcommand, который(запрос, соед);
cmd.параметры.AddWithValue("@email_ID", txtuser.Text);
cmd.параметры.AddWithValue ("@pswd", txtpass.Text);
sda = новый SqlDataAdapter(cmd);
dt = новый DataTable();
ПДД.Заполнить(ДТ);
Коннектикут.Открыть();
если (ДТ.Строк.Count > 0)
{
Сеанс["id"] = txtuser.Текст;
Ответ.Перенаправление("добро пожаловать.aspx-файл");
Сессия.Метод removeall();
}
еще
{
lblmessage.Text = "неверное имя пользователя или пароль неверны";
lblmessage.ForeColor = Система.Рисование.Цвет.Красный;

}
}
поймать(исключение бывший)
{
Ответ.Write("проблема подключения \n" + ex.сообщение);
Ответ.Write("источник исключения есть"+ ex.Source);

}

когда я устанавливаю свою точку останова на select query она показывает что запрос равен нулю