1. 程式人生 > >ASP.NET(C#)後臺安全登陸程式碼(防XSS攻擊\萬能密碼漏洞)

ASP.NET(C#)後臺安全登陸程式碼(防XSS攻擊\萬能密碼漏洞)

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/