老婆使用说明书——注册系统的逻辑与结构

 

【品名】妻子
【俗称】媳妇儿
【通用名】老婆
【英文名】 wife
【化学名称】已婚女性
【成分】水、蛋白质、脂肪、核糖核酸、碳水化合物以及少量矿物质,气味幽香。
【理化性质】酸性;可分为一价(嫁)、二价() 、三价(嫁)……n 价(嫁)。易溶于密语、甜言;遇钻石、名车、豪宅熔点降低,难溶于白丁。
【性状】本品为可乐状凹凸异性片,表面光洁,涂有各种化妆品、对钻石、铂金有强烈的亲和力;害羞时泛红,生气时泛绿,随时间推移表面会出现黄斑,起皱,但不影响继续使用。
【功能主治】主治单身恐惧症,对失恋者和相思病有明显效果,亦可用于烧淘洗买、带孩子。
【副作用】气管炎、耳根软、视疲劳、行为受阻等。严重不良反应者,可致皮肉损伤。
【用法用量】一生一片。
【禁忌症】公开服用两片或两片以上
【注意事项】
1 、肾功能不全者慎用
2 、请控制每日用量,如身体出现不适应症状应适当控制频次;
3 、服用本品时如同时服用其他药品请咨询生产企业,否则后果自负;
【规格】几十千克志几百千克,片重超标不影响使用,一般以45kg 为最佳。
【贮藏】常温下保存。避免与成年女性、单独帅哥相处。严禁在外过夜,应放到男人不易接触到的位置保存。
【包装】各种时装、鞋帽、首饰、手袋,随季节变化更换。
【有效期】终生有效。
【批准文号】见钻石购买发票号码
【生产日期】同身份证出生年月日
【生产企业】岳父岳母(仅针对于岳父岳母作风正派)。
本产品质量三包,如出现质量问题请与当地民政局联系。

这是网上非常热的一个博文,我想,作者这家伙,一定是个编程天才,如果不学编程,那是相当的可惜了

前面注册的代码,很多网友看后都生气了,后果很严重,都急吼吼地要来Sql 注入了。

很多小盆友,包括本大人,N 小时前,也不知道还有注入一说。感谢网友不吝赐教,本大人现学现卖,科普一下吧,讲最简单的,你在用密码文本框中输入1' or '1'='1 ,用户名随意,所谓的登录系统,就形同虚设……

解决这个问题的方法有很多,其中,一个重要的方法,就是参数化查询。

参数化查询就是在访问数据库时,在需要填入数值或数据的地方,使用参数 (SqlParameter) 来给值。在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL 指令的一部份来处理,而是在数据库完成SQL 指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。

SqlParameter 这么厉害?想不想讨来做老婆?帮你看看家门,河东狮吼,吓退十万注入客??

扫描二维码关注公众号,回复: 1357833 查看本文章

还是让我们先附庸风雅,写一个SqlParameter 使用说明书吧:

【家住何方(程序集名称)】system.data.dll

【姓甚(命名空间)】 System.Data.SqlClient
【名谁(名称)】SqlParameter
【祖父母】System.Object
【父母】System.MarshalByRefObject

【主要功能】可单独或做成数组,存放、传递SqlCommand 的参数或参数组,当然是防止骇客Sql 注入
【主要缺点】不能生育,无法继承此类
【备注】参数名称不区分大小写

【生产日期】new 的那一刻
【有效期】招之即来,挥之即去,用完自动消失
【使用方法】参考下面示例程序:

protected void btnRegist_Click(object sender, EventArgs e)
{
    string strConnection = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString;
    string cmdText = "INSERT INTO Users(Username,Password,Name,Sex,Age,Phone,Email,QQ) values(@Username,@Password,@Name,@Sex,@Age,@Phone,@Email,@QQ)";

    string username = txtUserName.Text;
    string password = txtPassword.Text;
    string name = txtName.Text;
    string sex = radlSex.SelectedValue;
    int age = int.Parse(txtAge.Text);
    string phone = txtPhone.Text;
    string email = txtEmail.Text;
    string qq = txtQQ.Text;

    SqlParameter[] parms ={
        new SqlParameter("@UserName", SqlDbType.VarChar, 20),
        new SqlParameter("@Password", SqlDbType.VarChar, 20),
        new SqlParameter("@Name", SqlDbType.VarChar, 20),
        new SqlParameter("@Sex", SqlDbType.VarChar, 2),
        new SqlParameter("@Age", SqlDbType.Int),
        new SqlParameter("@Phone", SqlDbType.VarChar, 20),
        new SqlParameter("@Email", SqlDbType.VarChar, 50),
        new SqlParameter("@QQ", SqlDbType.VarChar, 20)};

    parms[0].Value = username;
    parms[1].Value = password;
    parms[2].Value = name;
    parms[3].Value = sex;
    parms[4].Value = age;
    parms[5].Value = phone;
    parms[6].Value = email;
    parms[7].Value = qq;


    SqlCommand cmd = new SqlCommand();
    SqlConnection conn = new SqlConnection(strConnection);
    try
    {
        if (conn.State != ConnectionState.Open)
            conn.Open();

        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = cmdText;

        foreach (SqlParameter parm in parms)
            cmd.Parameters.Add(parm);

        cmd.ExecuteNonQuery();
    }
    catch
    {
        Response.Redirect("ErrorMessage.aspx");
    }
    finally
    {
        conn.Close();
    }

    Response.Redirect("Login.aspx");
}

这段代码,使用逻辑,您熟悉吧?

实现逻辑,就一句话,把注册界面输入的参数接收下来,插入到数据库的表格Users 中,然后跳转到登录界面;

除了SqlParameter 类,没发现陌生面孔吧?

认识、熟悉、掌握和使用一个类,最主要的,就是掌握这个类是干什么的,和怎么使用,而这两点中,类是干什么的,又是最最重要的,当你知道这个类是干什么的时候,怎么使用,往往就是不言而喻了

声明一点吧:现在这段代码,因为主要是学习最基本的数据库访问技术,所在,在界面上能省即省,没有加验证控件,大家拍砖,别往这儿拍哈……

版权所有©2012, 欢迎转载,转载请注明出处.更多文章请参阅博客http://blog.csdn.com/yousuosi

猜你喜欢

转载自webzixue.iteye.com/blog/1677248