none
C# Asp.net login 問題 RRS feed

  • 一般討論

  • 一開始也能登入.... 現在便出現一些警句 不能登入 為什麼會這樣@@      我還打算糾正開頭 改正SQL injection attack

                OleDbConnection connection = new OleDbConnection();
                connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\sim\Desktop\Web.accdb";
                connection.Open();
               OleDbCommand command = new OleDbCommand();
                  command.Connection = connection;
                  command.CommandText = "select * from Registration where Name ='" + TextBox1.Text + "' and Password ='" + TextBox2.Text + "';";

                OleDbDataReader reader = command.ExecuteReader();
                int count = 0;

                while (reader.Read())
                {
                   count = count + 1;
                }
                if (String.IsNullOrEmpty(TextBox1.Text))
                {
                    MessageBox.Show("You have't input the Username.");
                }
                if (String.IsNullOrEmpty(TextBox2.Text))
                {
                    MessageBox.Show("you havn't input the Password.");
                }
                if (count == 1)
                {
                    Session["UserID"] = TextBox1.Text ;
                    Response.Write("Username and password is valid");
                    connection.Close();
                    connection.Dispose();
                    Response.Redirect("Purchase.aspx", true);

                }
                else
                {
                    MessageBox.Show("Username or Password is not matched");
                }

    Error :

    '/' 應用程式中發生伺服器錯誤。

    無值提供給一或多個必要參數。

    描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

    例外詳細資訊: System.Data.OleDb.OleDbException: 無值提供給一或多個必要參數。

    原始程式錯誤:
    在執行目前 Web 要求期間,產生未處理的例外狀況。如需有關例外狀況來源與位置的資訊,可以使用下列的例外狀況堆疊追蹤取得。

    堆疊追蹤:
    [OleDbException (0x80040e10): 無值提供給一或多個必要參數。]
       System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +1070856
       System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +247
       System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +194
       System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +58
       System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +167
       System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) +116
       System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +4
       System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +144
       System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +319
       System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92
       System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1618
       System.Web.UI.WebControls.AccessDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +76
       System.Web.UI.WebControls.ListControl.OnDataBinding(EventArgs e) +97
       System.Web.UI.WebControls.ListControl.PerformSelect() +34
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74
       System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +66
       System.Web.UI.WebControls.ListControl.OnPreRender(EventArgs e) +29
       System.Web.UI.Control.PreRenderRecursiveInternal() +103
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Control.PreRenderRecursiveInternal() +175
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint

               
    • 已變更類型 Bill ChungMVP, Moderator 2015年5月13日 上午 11:27 發問者沒有繼續回覆詳細資料, 已經石沉大海
    2015年4月19日 下午 12:00

所有回覆

  • (1) ADO.NET 的部分, 改成參數式查詢後再來討論才有意義. 先看此文件 ADO.NET

    (2) 先別講甚麼 ADO.NET.  你的邏輯順序就很怪了.

    基本上會先判斷 TextBox 內輸入的值是否為 Null 或  空字串 或是不符合其他規則 (比方至少六個字之類的), 就可以直接跳出訊息, 並且跳出這個 Method, 根本沒有再去從資料庫中撈資料的必要.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2015年4月19日 下午 05:54
    版主
  • 程式問題還真不少,但 SQL Injection 比任何問題都嚴重,請優先解決它,再來看你其他的問題。

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2015年4月20日 上午 02:14
    版主