对数据库进行的字符串攻击

完整修改查询:

输入要删除的用户名,提示有没有此条数据,如果有而后提示是否确定要删除

添加:

using System.Data.SqlClient;

而后:

namespace 完整修改查询_字符串攻击
{
    class Program
    {
        static void Main(string[] args)
        {
            bool has = false;//判断用输入的数据是否存在,true表示存在,false不存在

            Console.Write("请输入要删除的用户名:");
            string uname = Console.ReadLine();

            SqlConnection conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=123");
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select *from Users where UserName = ‘" + uname + "‘";

            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows) //如果查到此用户信息
            {
                has = true;//将中间变量更改为true,证明有此条信息
            }
            conn.Close();

            if (has)//如果有此条信息,那么需要进行删除判断
            {
                Console.Write("已查到此用户信息,是否要删除?(Y/N)");
                string u = Console.ReadLine(); //记录用户的操作
                if (u.ToUpper() == "Y")//判断用户操作,如果是Y,说明要删除
                {
                    //下面的代码是真正删除此条数据
                    cmd.CommandText = "delete from Users where UserName = ‘" + uname + "‘";
                    int c = 0;
                    try
                    {
                        conn.Open();
                        c = cmd.ExecuteNonQuery();
                    }
                    catch
                    {
                        Console.WriteLine("服务器连接失败!!");
                    }
                    finally
                    {
                        conn.Close();
                    }

                    if (c > 0)//判断是否删除成功
                        Console.WriteLine("删除成功!");
                    else
                        Console.WriteLine("删除失败!!");
                }
                else//用户选择不删除
                {
                    Console.WriteLine("删除取消!");
                }
            }
            else//未查到用户信息,判断has=false
            {
                Console.WriteLine("用户名输入错误!未查到此用户信息!");
            }

            Console.ReadKey();
        }
    }
}

防止字符串攻击:
使用  @变量名

namespace Update
{
    class Program
    {
        static void Main(string[] args)
        {
            bool has = false;//判断用输入的数据是否存在,true表示存在,false不存在

            Console.Write("请输入要修改的用户名:");
            string uname = Console.ReadLine();

            SqlConnection conn = new SqlConnection("server=.;database=Data0928;user=sa;pwd=123");
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select *from Users where UserName = ‘" + uname + "‘";

            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows) //如果查到此用户信息
            {
                has = true;//将中间变量更改为true,证明有此条信息
            }
            conn.Close();

            if (has)//如果有此条信息,那么需要进行删除判断
            {
                Console.Write("已查到此用户信息,是否要修改?(Y/N)");
                string u = Console.ReadLine(); //记录用户的操作
                if (u.ToUpper() == "Y")//判断用户操作,如果是Y,说明要删除
                {
                    Console.Write("请输入要修改的密码:");
                    string pwd = Console.ReadLine();
                    Console.Write("请输入要修改的昵称:");
                    string nick = Console.ReadLine();
                    Console.Write("请输入要修改的性别:");
                    string sex = Console.ReadLine();
                    Console.Write("请输入要修改的生日:");
                    string bir = Console.ReadLine();
                    Console.Write("请输入要修改的民族:");
                    string nation = Console.ReadLine();
                    Console.Write("请输入要修改的班级:");
                    string cla = Console.ReadLine();
                    //防止字符串攻击
                    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();
                    Console.WriteLine("修改成功!");
                }
                else//用户选择不删除
                {
                    Console.WriteLine("修改取消!");
                }
            }
            else//未查到用户信息,判断has=false
            {
                Console.WriteLine("用户名输入错误!未查到此用户信息!");
            }
            Console.ReadKey();
        }
    }
}

时间: 2024-10-24 22:55:34

对数据库进行的字符串攻击的相关文章

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

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

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

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

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

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

格式化字符串攻击原理及示例

一.类printf函数簇实现原理 类printf函数的最大的特点就是,在函数定义的时候无法知道函数实参的数目和类型. 对于这种情况,可以使用省略号指定参数表. 带有省略号的函数定义中,参数表分为两部分,前半部分是确定个数.确定类型的参数,第二部分就是省略号,代表数目和类型都不确定的参数表,省略号参数表中参数的个数和参数的类型是事先的约定计算出来的,每个实参的地址(指针)是根据确定参数表中最后一个实参的地址算出来的. 这里涉及到函数调用时的栈操作.函数栈的栈底是高地址,栈顶是底地址.在函数调用 时

格式化字符串攻击

什么是格式化字符串攻击? format string attack https://www.owasp.org/index.php/Format_string_attack 首先攻击发生在 格式化字符串所涉及的函数(例如 printf), 其次用户输入字符串提交后作为格式化字符串参数执行. 攻击者可以执行代码, 读取栈空间. 写栈空间. 导致进行段错误(segment fault),或者导致其他的威胁到计算机安全和稳定性的新的行为. 举例子 正确例子,其中 "Bob %%x %%x"

格式化字符串攻击原理及示例.RP

格式化字符串攻击原理及示例 一.类printf函数簇实现原理 类printf函数的最大的特点就是,在函数定义的时候无法知道函数实参的数目和类型. 对于这种情况,可以使用省略号指定参数表. 带有省略号的函数定义中,参数表分为两部分,前半部分是确定个数.确定类型的参数,第二部分就是省略号,代表数目和类型都不确定的参数表,省略号参数表中参数的个数和参数的类型是事先的约定计算出来的,每个实参的地址(指针)是根据确定参数表中最后一个实参的地址算出来的. 这里涉及到函数调用时的栈操作.函数栈的栈底是高地址,

C# 连接SQL Server数据库的连接字符串<转>

C#连接SQL Server数据库的连接字符串,我们一个一个参数来介绍(注意:参数间用分号分隔): “user id=sa”:连接数据库的验证用户名为sa.他还有一个别名“uid”,所以这句我们还可以写成“uid=sa”. “password=”:连接数据库的验证密码为空.他的别名为“pwd”,所以我们可以写为“pwd=”. 这里注意,你的SQL Server必须已经设置了需要用户名和密码来登录,否则不能用这样的方式来登录.如果你的SQL Server设置为Windows登录,那么在这里就不需要

配置NHibernate将枚举保存为Oracle数据库中的字符串

假设有这样一个枚举: /// <summary> /// 字典项类型 /// </summary> public enum DicItemType { [EnumDescription("程序使用")] Program = 0, [EnumDescription("用户自定义")] Custom = 1 } NHibernate默认是映射为数据库中的数字类型,也就是0或者1.当我们使用数据库管理工具(例如PLSql/Developer)直接浏

完整修改查询、字符串攻击

完整修改查询: 输入要删除的用户名,提示有没有此条数据,如果有而后提示是否确定要删除 添加: using System.Data.SqlClient; 而后: namespace 完整修改查询_字符串攻击 { class Program { static void Main(string[] args) { bool has = false;//判断用输入的数据是否存在,true表示存在,false不存在 Console.Write("请输入要删除的用户名:"); string una