字符串防攻击,匿名函数

字符串攻击样式:

主要利用获取需用户输入的字符串时,通过输入精心编制的含有某种指令的字符串,从而对数据库进行攻击性操作。

‘;(内容);--

那我们如何来防止攻击:主要是用Parameters这个集合

                    cmd.CommandText = "update Users set [email protected],[email protected],[email protected],[email protected],[email protected],[email protected] where [email protected]";
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@pwd", pwd);
                    cmd.Parameters.AddWithValue("@nick", nick);
                    cmd.Parameters.AddWithValue("@sex", sex);
                    cmd.Parameters.AddWithValue("@bir", bir);
                    cmd.Parameters.AddWithValue("@nation", nation);
                    cmd.Parameters.AddWithValue("@cla", cla);
                    cmd.Parameters.AddWithValue("@uname", uname);

                    conn.Open();
                    cmd.ExecuteNonQuery();
                    conn.Close();

通过使用此占位符来进行防字符串攻击,这样,占位符所代表的的仅仅是字符串,不带有代码含义。

__________________________________________________________________________________________________________________________

程序分三层:界面层、业务逻辑层、数据访问层

比较规范的写程序方法,要把业务逻辑层和数据访问层分开,此时需要创建实体类和数据访问类

封装类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 实体类_数据访问类.App_Code
{
    public class Users
    {
        private int _Ids;

        /// <summary>
        /// ids
        /// </summary>
        public int Ids
        {
            get { return _Ids; }
            set { _Ids = value; }
        }
        private string _UserName;

        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName
        {
            get { return _UserName; }
            set { _UserName = value; }
        }
        private string _PassWord;

        /// <summary>
        /// 密码
        /// </summary>
        public string PassWord
        {
            get { return _PassWord; }
            set { _PassWord = value; }
        }
        private string _NickName;

        /// <summary>
        /// 昵称
        /// </summary>
        public string NickName
        {
            get { return _NickName; }
            set { _NickName = value; }
        }
        private bool _Sex;

        /// <summary>
        /// 性别
        /// </summary>
        public bool Sex
        {
            get { return _Sex; }
            set { _Sex = value; }
        }
        private DateTime _Birthday;

        /// <summary>
        /// 生日
        /// </summary>
        public DateTime Birthday
        {
            get { return _Birthday; }
            set { _Birthday = value; }
        }
        private string _Nation;

        /// <summary>
        /// 民族
        /// </summary>
        public string Nation
        {
            get { return _Nation; }
            set { _Nation = value; }
        }
        private string _Class;

        /// <summary>
        /// 班级
        /// </summary>
        public string Class
        {
            get { return _Class; }
            set { _Class = value; }
        }

    }
}

创建以上类,代表一个用户的所有数据

___________________________________________________________________________________________________________________________

数据访问类:便于调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace 实体类_数据访问类.App_Code
{
    public class UsersData
    {
        SqlConnection conn = null;
        SqlCommand cmd = null;

        public UsersData()
        {
            conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=123");
            cmd = conn.CreateCommand();
        }

        /// <summary>
        /// 将数据添加到Users表中,返回true说明添加成功
        /// </summary>
        /// <param name="u">要添加到数据表中的Users对象</param>
        /// <returns></returns>
        public bool Insert(Users u)
        {
            bool ok = false;
            int count = 0;

            cmd.CommandText = "insert into Users values(@a,@b,@c,@d,@e,@f,@g)";
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@a", u.UserName);
            cmd.Parameters.AddWithValue("@b", u.PassWord);
            cmd.Parameters.AddWithValue("@c", u.NickName);
            cmd.Parameters.AddWithValue("@d", u.Sex);
            cmd.Parameters.AddWithValue("@e", u.Birthday);
            cmd.Parameters.AddWithValue("@f", u.Nation);
            cmd.Parameters.AddWithValue("@g", u.Class);

            try
            {
                conn.Open();
                count = cmd.ExecuteNonQuery();
            }
            catch { ok = false; }
            finally
            {
                conn.Close();
            }

            if (count > 0)
                ok = true;

            return ok;
        }

        public List<Users> Select()
        {
            List<Users> list = new List<Users>();

            cmd.CommandText = "select *from Users";
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Users u = new Users();
                    u.Ids = Convert.ToInt32(dr["ids"]);
                    u.UserName = dr["UserName"].ToString();
                    u.PassWord = dr["PassWord"].ToString();
                    u.NickName = dr["NickName"].ToString();
                    u.Sex = Convert.ToBoolean(dr["Sex"]);
                    u.Birthday = Convert.ToDateTime(dr["Birthday"]);
                    u.Nation = dr["Nation"].ToString();
                    u.Class = dr["Class"].ToString();

                    list.Add(u);
                }
            }
            conn.Close();

            return list;
        }

        public bool Select(string username)
        {
            bool has = false;
            cmd.CommandText = "select *from Users where UserName = @a";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@a",username);

            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
                has = true;

            conn.Close();
            return has;
        }

        public void Delete(string uname)
        {
            cmd.CommandText = "delete from Users where UserName = @a";
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@a",uname);

            conn.Open();
            cmd.ExecuteNonQuery();

            conn.Close();
        }

    }
}

__________________________________________________________________________________________________________________________

1、一般约定,在项目里新建一个叫做App_Code的文件夹,将封装的类和数据访问类统一放在其中

2、一般实体类使用想要进行操作的数据库中的表名来命名,数据库访问类用此表的表名后面加上Data来命名

3、注意数据访问类开头格式

        SqlConnection conn = null;
        SqlCommand cmd = null;

        public UsersData()
        {
            conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=123");
            cmd = conn.CreateCommand();
        }

___________________________________________________________________________________________________________________________

4、匿名函数:

List<Users> ulist = new UsersData().Select();

直接使用UserData类中的Select方法(查询表中所有数据),并赋值给叫做ulist的泛型集合,从而比较简便的获取到所有数据,节省代码。起到少用内存的效果。

时间: 2024-10-08 09:48:19

字符串防攻击,匿名函数的相关文章

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

字符串攻击: 主要利用获取需用户输入的字符串时,通过输入精心编制的含有某种指令的字符串,从而对数据库进行攻击性操作. 防攻击: 例 cmd.CommandText = "update Users set [email protected],[email protected],[email protected],[email protected],[email protected],[email protected] where [email protected]"; cmd.Param

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

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namesp

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

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类:  实体类 二.数据访问类 将某个表的数据库操作写成一个一个方法,放入到此类中供外部调用 这是一个数据访问类:  数据访问类 三.字符串攻击,防攻击 字符串攻击: 主要利用获取需用户输入

ado.not--数据库防字符串注入攻击学习及 练习

数据库防字符串注入攻击:cmd.CommandText = "update student set [email protected],[email protected],[email protected],[email protected] where code = @Scode";cmd.Parameters.Clear();                ---------一个集合cmd.Parameters.Add("@Sname", Sname);cmd.

完整修改和删除以及防字符串注入攻击

完整修改: 1 //1.接收用户输入进来的学生编号 2 Console.Write("请输入要修改的学生编号:"); 3 string Scode = Console.ReadLine(); 4 5 //2.判断有无此学生 6 SqlConnection conn = new SqlConnection("server=.;database=Data0425;user=sa;pwd=123;"); 7 SqlCommand cmd = conn.CreateComm

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

防止SQL数据库字符串注入攻击 SQL数据库字符串注入攻击:需要使用cmd.Parameters这个集合占位符: @key 代表这个位置用这个占位符占住了 Parameters这个集合中将此占位符所代表的数据补全 cmd.Parameters.Clear(); --添加占位符数据之前,要清空此集合cmd.Parameters.Add("@pwd", Pwd); --占位符内容填充cmd.Parameters.Add("@nname",Nname);cmd.Param

php防攻击方法

php防攻击方法 更多答案 请参考 @如何有效防止XSS攻击/AJAX跨域攻击 我说下防止非法用户的一些常用手段吧 1 前端的js验证: 我认为js验证只是一种用户体验的提升,对普通用户群体的简单限制,所以后台必须要有相应的验证.. 2表单中的隐藏域 : 相信大家都遇到过这样的问题,如: 用户从 A 页面 点如 B 页面,B页面是个表单,这个表单中有个隐藏域,用来记录从A页面带来的数据(像id等),用户提交时 在后台修改,新增数据都是依赖这个隐藏域的值,如果这里不做好验证的话,很可能被用户修改隐

python函数(6):内置函数和匿名函数

我们学了这么多关于函数的知识基本都是自己定义自己使用,那么我们之前用的一些函数并不是我们自己定义的比如说print(),len(),type()等等,它们是哪来的呢? 一.内置函数 由python内部定义好我们可以直接调用的函数就叫内部函数.python一共给我们68个内置函数: abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() as

Day10:内置函数、匿名函数、递归函数

一.内置函数 1.数学运算类 2.集合类操作 内置函数个别使用示例 1.any 集合中的元素有一个为真的时候为真, 特别的,若为空串返回为False 1 print(any([0,''])) 2 print(any([0,'',1])) 执行结果 1 False 2 True 2.divmod 取商得余数,用于做分页显示功能 1 print(divmod(10,3)) #取商得余数,用于做分页显示 执行结果 1 (3, 1) 3.eval  把字符串中的数据结构给提取出来 1 dic={'nam