字符串攻击防攻击实体类数据访问类--11月29日

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串攻击防攻击实体类数据访问类--11月29日相关的知识,希望对你有一定的参考价值。

防止SQL数据库字符串注入攻击

SQL数据库字符串注入攻击:
需要使用cmd.Parameters这个集合
占位符: @key 代表这个位置用这个占位符占住了

Parameters这个集合中将此占位符所代表的数据补全

cmd.Parameters.Clear(); --添加占位符数据之前,要清空此集合
cmd.Parameters.Add("@pwd", Pwd); --占位符内容填充
cmd.Parameters.Add("@nname",Nname);
cmd.Parameters.Add("@sex", (Sex=="男")?"1":"0");
cmd.Parameters.Add("@bir", Birthday);
cmd.Parameters.Add("@nat", Nation);
cmd.Parameters.Add("@uname", Uname);

 

 

实体类

封装

封装一个类,类名与数据库表名一致
成员变量名与列名一致,多一个下划线
成员变量封装完的属性,就会与数据表中的列名一致

例:

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 实体类_数据访问类.App_Code
{
    public class Users
    {
        private int _code;
        /// <summary>
        /// code
        /// </summary>
        public int Code
        {
            get { return _code; }
            set { _code = value; }
        }
        private string _usename;
        /// <summary>
        /// 用户名
        /// </summary>
        public string Usename
        {
            get { return _usename; }
            set { _usename = value; }
        }
        private string _password;
        /// <summary>
        /// 用户密码
        /// </summary>
        public string Password
        {
            get { return _password; }
            set { _password = value; }
        }
        private string _nick;
        /// <summary>
        /// 昵称
        /// </summary>
        public string Nick
        {
            get { return _nick; }
            set { _nick = value; }
        }
        private bool _sex;
        /// <summary>
        /// 性别
        /// </summary>
        public bool Sex
        {
            get { return _sex; }
            set { _sex = value; }
        }
        private string _nation;
        /// <summary>
        /// 民族
        /// </summary>
        public string Nation
        {
            get { return _nation; }
            set { _nation = value; }
        }
        private string _class;
        /// <summary>
        /// 班级
        /// </summary>
        public string _class1
        {
            get { return _class; }
            set { _class = value; }
        }
        private DateTime _birthday;
        /// <summary>
        /// 生日
        /// </summary>
        public DateTime Birthday
        {
            get { return _birthday; }
            set { _birthday = value; }
        }
    }
}

每一行数据都可以存成一个对象,操作这个对象,就相当于对某一行数据进行整体操作

 

 

数据访问类

就是将对数据库的一些操作,单独写到一个类中,封成一些方法,等待调用

结构看起来会非常清晰

例:

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace 实体类_数据访问类.App_Code
{
    public class UserDate
    {
        SqlConnection conn = null;
        SqlCommand com = null;
        public UserDate()
        {
            conn = new SqlConnection("server=.;database=Data1128;user=sa;pwd=123");
            com = conn.CreateCommand();
        }
        /// <summary>
        /// 将数据添加到Users表中,添加成功返回true,失败返回false
        /// </summary>
        /// <param name="u">要添加到表中的Users对象</param>
        /// <returns>添加成功返回true,失败返回false</returns>
        public bool insert(Users u)
        {
            bool ok = false;
            int count = 0;
            com.CommandText = "insert into Users values(@usename,@password,@nick,@sex,@nation,@class,@birthday)";
            com.Parameters.Clear();
            com.Parameters.AddWithValue("@usename",u.Usename);
            com.Parameters.AddWithValue("@password", u.Password);
            com.Parameters.AddWithValue("@nick", u.Nick);
            com.Parameters.AddWithValue("@sex", u.Sex);
            com.Parameters.AddWithValue("@nation", u.Nation);
            com.Parameters.AddWithValue("@class", u._class1);
            com.Parameters.AddWithValue("@birthday", u.Birthday);
            try
            {
                conn.Open();
                count=com.ExecuteNonQuery();
            }
            catch
            {
                ok = false;
            }
            finally
            {
                conn.Close();
            }
            if(count>0)
            {
                ok = true;
            }


            return ok;
        }

        /// <summary>
        /// 通过泛型集合对数据进行查询
        /// </summary>
        /// <returns>返回一个集合</returns>
        public List<Users> Select()
        {
            List<Users> list= new List<Users>();
            com.CommandText = "select *from Users";
            conn.Open();
            SqlDataReader dr = com.ExecuteReader();
            if(dr.HasRows)
            {
                while(dr.Read())
                {
                    Users u = new Users();
                    u.Code = Convert.ToInt32(dr["code"]);
                    u.Usename = dr["usename"].ToString();
                    u.Password = dr["password"].ToString();
                    u.Nick = dr["nick"].ToString();
                    u.Sex = Convert.ToBoolean(dr["sex"]);
                    u.Nation = dr["nation"].ToString();
                    u._class1 = dr["class"].ToString();
                    u.Birthday = Convert.ToDateTime(dr["birthday"]);

                    list.Add(u);
                }

            }

            conn.Close();
            return list;
        }

        /// <summary>
        /// 根据usename进行查询
        /// </summary>
        /// <param name="usename">要查询的usename对象</param>
        /// <returns>返回bool类型的值,返回true表示有usename这条数据</returns>
        public bool select(string usename)
        {
            bool has = false;
            com.CommandText = "select *from Users where [email protected]";
            com.Parameters.Clear();
            com.Parameters.AddWithValue("@usename",usename);
            conn.Open();
            SqlDataReader dr = com.ExecuteReader();
            if(dr.HasRows)
            {
                has = true;
            }
            conn.Close();
            return has;
        }
        //public void delete(string username)
        //{
        //    com.CommandText = "delete from Users where [email protected]";
        //    com.Parameters.Clear();
        //    com.Parameters.AddWithValue("@usename", username);

        //    conn.Open();
        //    com.ExecuteNonQuery();
        //    conn.Close();
        //}


        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="username">要查询的usename对象</param>
        /// <returns>返回bool类型的值,返回true表示删除成功</returns>
        public bool delete(string username)
        {
            bool have = false;
            int cc = 0;
            com.CommandText = "delete from Users where [email protected]";
            com.Parameters.Clear();
            com.Parameters.AddWithValue("@usename", username);
            try
            {
                conn.Open();
                cc = com.ExecuteNonQuery();
            }
            catch
            {
                have = false;
            }
            finally
            {
                conn.Close();
            }
            if (cc > 0)
            {
                have = true;
            }
            return have;
        }
    }
}

 

 

 

*三层开发:
界面层 - UI层
业务逻辑层 - C#代码部分
数据访问层 - 实体类和数据访问类

以上是关于字符串攻击防攻击实体类数据访问类--11月29日的主要内容,如果未能解决你的问题,请参考以下文章

字符串攻击防攻击实体类数据访问类

2017-4-20实体类,数据访问类.字符串攻击.防攻击

综合防攻击实体类数据访问类进行的练习

2017-4-21 字符串攻击 防御 实体类 数据访问类 属性扩展 三层架构开发

网站被攻击选择哪里的高防服务器比较好呢

服务器要怎么防cc攻击?