解析防网站登陆被破解的简单方法_.Net教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:asp.net程序中实现checkbox全选代码
程序开发中经常会要用到checkbox的全选,通常情况下是在一些数据绑定控件中如gridview等。下面以repeater为例,在repeater的header和item中放入checkbox控件 asp:RepeaterID=rptGrouprunat=server HeaderTemplate tablewidth=100%cellspacing=1class

    在大多数的基于数据库的身份认证登陆模块,大多数的程序员只是用一个简单的SQL查询语句来实现,这样很容易被用户以简单的(   1’ or ’1’=’1  )查询替换给破解.其实只要稍微的修改一下代码,便可以防止.具体请参看以下两个函数的实现:
    以下代码基于C#,数据库为Access
1.  未防止  1’ or ’1’=’1   替换的情况:

 private bool ValidateUser(string LoginId, string LoginPwd)
        {
            bool isCorrect = false;             

            try
            {
                DBAccept.conn.Open();

                string sql = String.Format("select UserName from UserManagement where [UserName]=’{0}’ and [Password]=’{1}’", LoginId, LoginPwd);
           
                OleDbCommand command = new OleDbCommand(sql, DBAccept.conn);
               
                if (command.ExecuteReader().HasRows)
                {
                    isCorrect = true;
                }
                else
                {
                    isCorrect = false;
                    MessageBox.Show("此管理员用户不存在或者密码错误,请重试", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("操作数据库出错", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                DBAccept.conn.Close();
            }
     
            return isCorrect;
        }

2.修正版,可正常阻止 1’ or ’1’=’1 登陆
private bool ValidateUser(string LoginId, string LoginPwd)
        {
            bool isCorrect = false;  //定一个bool变量
            try
            {
                DBAccept.conn.Open();

                string sql = String.Format("select Password from UserManagement where [UserName]=’{0}’", LoginId);
                OleDbCommand command = new OleDbCommand(sql, DBAccept.conn);
                 if (command.ExecuteScalar().ToString() == LoginPwd)
                {
                    isCorrect = true;
                }
                else
                {
                    isCorrect = false;
                    MessageBox.Show("此管理员用户不存在或者密码错误,请重试", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("操作数据库出错", "失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                DBAccept.conn.Close();
            } 
            return isCorrect;
        }        

分享:解析五种ADO.NET数据库连接知识
ADO.NET提供了多种对象模型,比较典型的以下有五种,它们全部归类在System.Data.SqlClient名称空间下。 一、SqlConnection对象 ADO.NET使用SqlConnection对象与SQLServer进行连接。连接字符串的常用形式有两种: 1.使用Windows集成安全身份认证,例如:strin

来源:模板无忧//所属分类:.Net教程/更新时间:2010-04-11
相关.Net教程