ASP.NET(C#)後臺安全登陸程式碼(防XSS攻擊\萬能密碼漏洞)
阿新 • • 發佈:2019-01-05
string ispostback = Context.Request["ispostbask"]; string k8user = this.txtUser.Text.Trim(); string k8pwd = this.txtPwd.Text.Trim(); string k8md5pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(k8pwd, "MD5").ToLower(); //判斷是否是表單提交過來的 if (ispostback == "true") { //判斷輸入是否為空 if (k8user != "" || k8pwd != "") { //使用正則 嚴格檢查 這裡是關鍵 呵呵 //沒有特殊符號 所以萬能密碼裡的= 號分號等失效 //XSS也是一樣 < % 各種語句要用到的符號都不符合 //使用者名稱長度4-8個 字母或數字 Regex k8chkName = new Regex("^[[a-zA-Z0-9]{4,8}$"); //密碼7-12 字母大小寫以及數字 Regex k8chkpwd1 = new Regex(@"\d+"); Regex k8chkpwd2 = new Regex(@"[a-zA-Z]+"); Regex k8chkpwd3 = new Regex(@"^[a-zA-Z0-9]{7,12}$"); //檢測使用者名稱 if (k8chkName.IsMatch(k8user)) { //檢測密碼 if (k8chkpwd1.IsMatch(k8pwd) && k8chkpwd2.IsMatch(k8pwd) && k8chkpwd3.IsMatch(k8pwd)) { //ClientScript.RegisterStartupScript(GetType(), "", "alert('符合輸入');", true); //這裡再連線你的資料庫 插入或者幹嘛 隨你大小便 try { OleDbConnection K8conn = new OleDbConnection(); K8conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Server.MapPath("K8Data/k8access.mdb"); K8conn.Open(); //開啟資料庫 //定義字串 string k8sql = "select count(*) from K8admin where User='" + txtUser.Text.Trim() + "' and Pass='" + k8md5pwd + "'";//建立sql查詢語句 OleDbCommand cmd = new OleDbCommand(k8sql, K8conn);//建立資料集 int state = Convert.ToInt32(cmd.ExecuteScalar());//執行sql語句,並返回獲得值 if (state == 0 || state > 1)//如果資料中沒有記錄或有多條記錄則抱錯 { ClientScript.RegisterStartupScript(GetType(), "", "alert('使用者不存在或密碼錯誤');", true); } else//正確資料指向登陸後頁面 { //Session["k8user"] = k8user; //Session["k8pass"] = k8md5pwd; Response.Cookies.Add(new HttpCookie(k8user, k8md5pwd)); Response.Redirect("admin.aspx");//指向登陸後頁面 } K8conn.Close();//關閉資料庫 } catch { ClientScript.RegisterStartupScript(GetType(), "", "alert('連線資料庫失敗');", true); } return; } } } //為空或帳號密碼錯誤 ClientScript.RegisterStartupScript(GetType(), "", "alert('使用者不存在或密碼錯誤');", true); }
原文:http://qqhack8.blog.163.com/blog/static/114147985201162172136155/