1. 程式人生 > 其它 >簡單登入系統的實現(基於資料庫)及問題分析

簡單登入系統的實現(基於資料庫)及問題分析

技術標籤:c#mysql

基於資料庫的簡單登陸系統

說明

該實現使用的是asp.net開發,資料庫為MySQL

介面及資料庫表

在方片描述
介面中賬號對應的文字框的ID屬性為txtID, 密碼對應的文字框的ID屬性為txtPwd,登入按鈕為btnLogin

在這裡插入圖片描述
只有兩個欄位,分別表示賬號和密碼,其中表示賬號的欄位為主鍵

先看簡單的程式碼實現

//點選登入按鈕的事件
protected void btnLoin_Click(object sender, EventArgs e)
{
//需要的變數
MySqlConnection
conn; MySqlDataAdapter adpt; DataSet ds; //連線字串 string connStr = "server=localhost;uid=root;database=mis;pwd=123"; //查詢字串 string uid = txtID.text; string pwd = txtPwd.text; string queryStr = "select * from users where uid='"+uid+"' and pwd='"+pwd"';"; //將查詢到的結果填充到ds中,以表的形式存在,如果輸入的賬號密碼正確,表中只有一行記錄,否則沒有記錄
conn = new MySqlConnection(connstr); adpt = new MySqlDataAdapter(sqlStr, conn); ds = new DataSet (); adpt.Fill(ds); //判斷是否成功登入 if (ds.Tables[0].Rows.Count>0) { //成功登入則跳轉到下一介面 Response.Redirect("Main.aspx");//跳轉頁面,不同需求的小夥伴可根據需要更換該條語句 } else { //輸入不正確則彈出提示並且清空文字框 Response.
Write("<script type='text/javascript'>alert('賬號或密碼不正確,請重新輸入');</script>");//在頁面中彈出提示,不同需求的小夥伴可根據需要更換該條語句 txtID.Text = string.Empty; txtPwd.Text = string.Empty; } }

該登陸系統存在的問題(安全問題)

1 該系統的要求是登陸成功後才能進入主介面,但是目前的實現方式不能確保只有登陸成功才進入主介面,最簡單的可以通過輸入位址列的方式進入主介面。因此需要在登入介面設定一個值,登陸成功後將該值傳入主介面,在主介面驗證,驗證通過則正常執行,驗證不通過即使進入主介面,也要強制返回登陸介面。

2 SQL注入問題。SQL注入可以簡單的理解為通過使用者輸入構成SQL語句從而導致不知道密碼也可以登入成功。
如,該系統中,如果賬號文字框中輸入asdf(任意字元),密碼文字框中輸入任意字元(比如qwer)+‘or 1=’1,即可構成SQL語句
SELECT * FROM users WHERE uid =‘asdf’ and pwd=‘qwer’ or 1=‘1’;
該語句的執行效果 為該表的所有記錄。針對這個問題此可以新增新的程式碼限制危險字元(如單引號)的輸入,也可以將拼接SQL語句的方法換成其他方法。

3 資料庫層面的安全問題。對於該系統的管理員來說,可以進入資料庫,而資料庫中登入使用者的賬號密碼資訊是公開的,這就是一種不安全的因素。針對這個問題,可以在資料庫錄入資料時採用加密技術,如MD5加密,這樣就算進入了資料庫,也只能看到密文,無法得到使用者的資訊。

新手起步,歡迎各位交流和指正。