簡單登入系統的實現(基於資料庫)及問題分析
阿新 • • 發佈:2020-12-29
基於資料庫的簡單登陸系統
說明
該實現使用的是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加密,這樣就算進入了資料庫,也只能看到密文,無法得到使用者的資訊。