ADO.NET防止字符串攻击方法

在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击

如:输入班级值

--:代表后边内容都被注释掉了

防止SQL注入攻击方法

再给命令发送SQL语句的时候分两次发送,把SQL语句拆成两块,用户输入的是一块;本身写好的是一块,第一次把CommandText里写的sql语句发过去;第二次把变量值发过去,进行匹配

cmd.CommandText = "update Users set [email protected]"
cmd.Parameters.AddWithValue("@pwd",pwd);

栗子:

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

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("@**",**);有多少列绑多少个
                    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-11-05 20:48:14

ADO.NET防止字符串攻击方法的相关文章

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

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

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

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

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

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

使用ret2libc攻击方法绕过数据执行保护

前面介绍的攻击方法大量使用Shellcode,核心思想是修改EIP和注入Shellcode,在函数返回时跳到Shellcode去执行.要防止这种攻击,最有效的办法就是让攻击者注入的Shellcode无法执行,这就是数据执行保护(Data Execution Prevention, DEP)安全机制的初衷. 数据执行保护机制 DEP述语是微软公司提出来的,在window XP操作系统开始支持该安全特性.DEP特性需要硬件页表机制来提供支持. X86 32位架构页表上没有NX(不可执行)位,只有X8

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

字符串攻击: 主要利用获取需用户输入的字符串时,通过输入精心编制的含有某种指令的字符串,从而对数据库进行攻击性操作. 防攻击: 例 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文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类:  实体类 二.数据访问类 将某个表的数据库操作写成一个一个方法,放入到此类中供外部调用 这是一个数据访问类:  数据访问类 三.字符串攻击,防攻击 字符串攻击: 主要利用获取需用户输入

php防攻击方法

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

【连载】从安全攻击实例看数据库安全(二)安全攻击方法分析

回顾: 在上一章中主人公卡尔采用多种攻击方法对好运公司的网络信息系统进行攻击,通过MAC地址欺骗取得了与公司内部网络的连接,通过口令破解,以远程方式登录公司内部服务器,通过缓冲区溢出漏洞闯进了操作系统并拥有最高权限,最关键的是卡尔以好运公司信用卡信息为目标,通过三种途径,包括web应用的文件上传漏洞.SQL注入攻击和绕过合法应用的方法,批量导出数据库中大量的敏感信息. 攻击的方法多种多样,这些方法有的在上面攻击的实例中用过,有的随攻击对象的情形而变化,但也是有规律可循的.总的来说,攻击是一步一步

(转)常见的HTTPS攻击方法

0x00 背景 研究常见的https攻击方法 Beast crime breach,并针对https的特性提出一些安全部署https的建议. 针对于HTTPS的攻击,多存在于中间人攻击的环境中,主要是针对于HTTPS所使用的压缩算法和CBC加密模式,进行side-channel-attack.这几类攻击的前置条件都比较苛刻,且都需要受害主机提交很多次请求来收集破译关键数据的足够信息. 常见的攻击方法,主要有,BEAST Lucky-13 RC4 Biases CRIME TIME BREACH等