簡體   English   中英

SQL登錄asp.net

[英]SQL login asp.net

我在考慮登錄槽SQL,我創建了基本的登錄表單,如下所示

protected void btnLogin_Click(object sender, EventArgs e)
{
    string cs="Data Source=Dev-PC;Initial Catalog=CodeSolution;User ID=sa; password=12345678"
    SqlConnection con = new SqlConnection(cs);
    con.Open();
    String sqlCommand = "SELECT * FROM tblLogin WHERE "+
                     "username = @user AND password = @pwd"
    SqlCommand cmd = new SqlCommand(sqlCommand, con);
    cmd.Parameters.AddWithValue("@user", TextBox1.Text);
    cmd.Parameters.AddWithValue("@pwd", TextBox2.Text);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);
    if (dt.Rows.Count > 0)
    {
        Response.Redirect("Details.aspx");
    }
    else
    {
        Response.Write("<script>alert('Please enter valid Username and Password')</script>");
    }
}

但這然后讓我開始思考,因為如果沒有登錄,人們可能會猜測Details.aspx的網址

因此,我想知道登錄是否成功,還要向tblLogin添加一列並存儲該用戶的sessionID。 然后頁面僅應檢查該用戶的sessionID是否等於tblLogin的sessionID。

我想知道這里兩件事:

  • IIS服務器已知如何將會話ID存儲到tblLogin
  • 這是一個較差的解決方案,還是可以接受的(缺點是每個ASP頁面都應以檢查有效會話ID的函數開頭)。

刪除了一個錯誤,sqlCommand中的LIKE現在=

你似乎做這么多事情錯了,寫正確的答案會自動使這個問題太寬泛。 我將嘗試一下:

  • 不要硬編碼連接字符串。 將它們存儲在配置文件中,並按名稱引用它們。
  • 永遠不要使用您的sa帳戶,甚至不要用於開發。
  • 不要在表前加上tbl前綴,這是多余的。
  • 用戶名和密碼不要使用like ,而是要完全匹配。
  • 不要以明文形式存儲密碼。
  • “人們可能會猜到Details.aspx的URL” –您檢查每項操作的授權( “允許此用戶執行此操作” )。

解釋如何解決所有這些問題將需要太多的工作。 不要重新發明稱為授權和身份驗證的輪子。 為此,請使用安全的,經過測試且受支持的庫。

您可能需要研究ASP.NET成員資格或其后續ASP.NET Identity

並非您問題的確切答案,但這將是一個很好的指南/建議。

您擁有會話ID的想法一點也不差(取決於您的站點/系統的要求)。 但是在這種情況下,不是來自IIS的會話,因為您需要解密它,這將使您容易受到內聯攻擊(使您的DB / root文件夾可訪問)。

這是有關如何在登錄時獲取會話的會話ID的示例,但不是從IIS獲取的(您可以使用它來記錄日志):

string sessionId = System.Web.HttpContext.Current.Session.SessionID;

並且根據數據庫設計,最好有單獨的表來記錄用戶的會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM