字符串攻击防攻击实体类数据访问类--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日的主要内容,如果未能解决你的问题,请参考以下文章