ADO.NET 防止SQL注入

规避SQL注入

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

如:输入Code值

p001‘ union select * from Info where ‘1‘=‘1 //这样可以查询到所有数据,不要轻易相信用户输入的内容

防止SQL注入攻击

通用方法:可以用正则匹配掉特殊符号

推荐方法:再给命令发送SQL语句的时候分两次发送

      把SQL语句拆成两块

用户输入的是一块;本身写好的是一块

第一次把CommandText里写的sql语句发过去;第二次把变量值发过去,进行匹配

 例:

使列名等于一个变量名

改变量绑定参数 cmd.Parameters.AddWithValue("变量名称",变量值);

cmd.Parameters是对象里面的一个属性,返回值是一个集合

有时会用到同样的变量名 所以在绑定参数之前先清除一下cmd.Parameters.Clear();

        static void Main(string[] args)
        {
            //接收用户输入的查询条件
            Console.WriteLine("请输入要查询的汽车代号:");
            string code = Console.ReadLine();

            //造连接对象
            SqlConnection conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123");

            //造命令对象
            SqlCommand cmd = conn.CreateCommand();

            //给命令对象一条SQL语句
            //使code=一个变量
            cmd.CommandText = "select * from Car where [email protected]";
            //cmd.CommandText = "select * from Car where [email protected] or [email protected]";

            //改变量绑定参数
            cmd.Parameters.Clear();//清除绑定的变量,最好每次用参数集合前写一个清除
            cmd.Parameters.AddWithValue("@code",code);
            //cmd.Parameters.AddWithValue("@name",name);//有多少列绑多少个

            //打开连接
            conn.Open();

            //执行SQL语句
            SqlDataReader dr = cmd.ExecuteReader();

            //读取数据
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Console.WriteLine(dr[0] + "--" + dr[1]);
                }
            }
            else
            {
                Console.WriteLine("没有查到相应的数据");
            }

            //关闭连接
            conn.Close();

            Console.ReadLine();
        }    
时间: 2024-12-29 09:09:02

ADO.NET 防止SQL注入的相关文章

Ado.net 三[SQL注入,DataAdapter,sqlParameter,DataSet]

1.SQL注入:SQL注入攻击是web应用程序的一种安全漏洞,可以将不安全的数据提交给运用程序,使应用程序在服务器上执行不安全的sql命令.使用该攻击可以轻松的登录运用程序. 例如:该管理员账号密码为xiexun,该sql的正确语句应该为: select * from Users where userName='xiexun' 如果在没有做任何处理的情况下,在登录名文本框中输入(xuxian' delete users--),单击"登录"按钮之后,相当于传了两句sql语句,一句执行查询

ADO.net 防止SQL 字符串注入攻击

规避SQL注入 如果不规避,在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击 如:输入Code值 p001' union select * from Info where '1'='1 //这样可以查询到所有数据,不要轻易相信用户输入的内容 防止SQL注入攻击 通用方法:可以用正则匹配掉特殊符号 推荐方法:再给命令发送SQL语句的时候分两次发送 把SQL语句拆成两块 用户输入的是一块:本身写好的是一块 第一次把CommandText里写的sql语句发过去:第二次把变量值发过去,进行匹配 例:

(2)C#之ADO.Net 如何解决SQL注入漏洞攻击

SQL注入就是用户通过客户端请求GET或POST方式将SQL语句提交到服务端,欺骗服务器去执行恶意的SQL语句.例如下面这条SQL语句: 1 "select * from T_stuff where name = '"+txtbox1.text+"'"; 其中txtbox1是一个textbox控件,正常情况下我们会在这个textbox控件中输入一个姓名来查询员工的信息. 但是如果有用户在这个textbox控件中恶意输入一个拼接字符串,例如:"1' or '

ADO.NET快速入门——带参数的查询防止SQL注入攻击

相关知识: 把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数: 参数的设定: string strCmd = "SELECT AccountID FROM Account WHERE [email protected] AND [email protected]"; 对于SQL Server数据库,“@”是参数的前缀.上句中定义了两个参数:@Acc

ADO.NET快速入门——SQL注入攻击

相关知识: 可以通过字符串的拼接来构造一个SQL命令字符串,但是SQL命令字符串的拼接确是造成“SQL注入攻击”的重要原因. 考虑下列例子:从ProductCategory表中检索出Name为“Bikes”的类别信息.(示例数据库采用红皮书的数据库:AdventureWorks_WroxSSRS2012) 如果要凭借字符串,将写成: string name = "Bikes"; string strCmd = "SELECT ProductCategoryID, Name F

ADO。Net(二)——防止SQL注入攻击

规避SQL注入 如果不规避,在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击 如:输入Code值 p001' union select * from Info where '1'='1 //这样可以查询到所有数据,不要轻易相信用户输入的内容 防止SQL注入攻击 通用方法:可以用正则匹配掉特殊符号 推荐方法:再给命令发送SQL语句的时候分两次发送 把SQL语句拆成两块 用户输入的是一块:本身写好的是一块 第一次把CommandText里写的sql语句发过去:第二次把变量值发过去,进行匹配 例:

三、ADO.Net基础【05】SQL注入漏洞(SQLInjection)

使用字符串拼接的方式把sql语句所需参数拼接到将要执行的sql语句中(参数一般只sql语句的过滤条件),对于用户的恶意输入可能导致不一的查询结果 例如:一个登录的例子(UserName和Password是用户的输入的用户名和密码). "select count(*)  from T_Users where UserName=' "+UserName+" ' and Password= ' "+Password+" ' "; C#这段代码指C#将要

(转)防SQL注入的方法

——选自<深入Ajax : 架构与最佳实践 = Advanced Ajax : architecture and best practices/ (美)Shawn M.Lauriat著;张过,宋会敏等译> SQL注入 SQL注入攻击是指利用数据库服务器支持的SQL语法,以开发人员意料之外的方式执行SQL命令.这种攻击的主要形式是滥用传递到SQL中的未转义字符串,即滥用原本与SQL代码无关的GET或POST输出.结果是攻击者可以运行应用程序的数据库用户有权运行的任何SQL语句.利用SQL注入,攻

asp.net利用HttpModule实现防sql注入和加载样式和JS文件

1.新建一个类,实现IHttpModule接口 代码如下: public class SqlHttpModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.AcquireRequestState += new EventHandler(context_AcquireRequestState); } } 在实现接口的Init方法时,我们选择了Acquir