怎样写防止Sql注入的Sql语句

1.什么是SQL注入

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.

2.如何防止SQL注入

防止SQL注入的方法有两种:

a.把所有的SQL语句都存放在存储过程中,这样不但可以避免SQL注入,还能提高一些性能,并且存储过程可以由专门的数据库管理员(DBA)编写和集中管理,不过这种做法有时候针对相同的几个表有不同条件的查询,SQL语句可能不同,这样就会编写大量的存储过程。

b.使用参数化SQL查询语句。

3.为什么参数化SQL查询可以防止SQL注入

在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数运行,因此就算参数中含有恶意的指令,由于已经编译完成,就不会被数据库所运行。 有部份的开发人员可能会认为使用参数化查询,会让程序更不好维护,或者在实现部份功能上会非常不便,然而,使用参数化查询造成的额外开发成本,通常都远低于因为SQL注入攻击漏洞被发现而遭受攻击,所造成的重大损失。

4.如何写参数化的SQL查询语句(C#语句 SqlServer数据库)

在撰写 SQL 指令时,利用参数来代表需要填入的数值

Microsoft SQL Server 的参数格式是以 "@" 字符加上参数名称而成,如下:

SELECT * FROM myTable WHERE myID = @myID

INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)

例子1:

普通的Sql语句:

string idParam="001";

string querySql = "select count from [test] where id=‘"+idParam+"‘";

SqlCommand com = new SqlCommand(querySql, conn);

参数化的Sql语句:

string querySql = "select count from [test] where [email protected]";

SqlCommand com = new SqlCommand(querySql, conn);

com.Parameters.AddWithValue("@id", idParam);

例子2:

普通的Sql语句:

string updateSql= "insert into [test] (id,count,datetime) values (‘" + idParam + "‘,‘" + countParam+ "‘,‘" +          System.DateTime.Now.ToString() + "‘)";

SqlCommand com = new SqlCommand(updateSql, conn);

参数化的Sql语句:

updateSql = "insert into [test] (id,count,datetime) values (@id,@count,@datetime)";

updateComm = new SqlCommand(updateSql, conn);

updateComm.Parameters.AddWithValue("@id", idParam );

updateComm.Parameters.AddWithValue("@count", countParam);

updateComm.Parameters.AddWithValue("@datetime", System.DateTime.Now.ToString());

时间: 2024-10-07 20:09:23

怎样写防止Sql注入的Sql语句的相关文章

SQL注入学习总结(七):其他类型SQL注入之SQL约束攻击

其他类型注入的详解(4) 4.sql约束攻击 知识点 数据库字符串比较:在数据库对字符串进行比较时,如果两个字符的长度不一样,则会将较短的字符串末尾填充空格,使两个字符串的长度一致. 比如这两条语句 select * from admin where username='vampire' select *from admin where username='vampire ' 他们的查询结果是一致的. INSERT截断: 这是数据库的另一个特性,当设计一字段时,我们都必须对其设定一个最大长度,比

sql注入基础

有好多人都只知道有sql注入漏洞这种漏洞,也知道怎么用一些工具来利用漏洞,但是却不知道SQL注入漏洞的原理.为了帮助初学者理解sql注入的原理,我写下了这篇文章,希望能对大家有所帮助. 什么是SQL注入: SQL注入是攻击者通过把恶意SQL命令插入到Web表单的输入域或页面请求的查询字符串中,来达到欺骗服务器执行恶意的SQL命令的一种攻击方式.(数据与代码没有完全分离) Sql注入漏洞产生原理: 上面我们提到SQL注入的产生原因是数据和代码没有完全分离产生的.下面我们来看看SQL注入漏洞具体的产

SQL注入攻击和防御

什么是SQL注入? 简单的例子, 对于一个购物网站,可以允许搜索,price小于某值的商品 这个值用户是可以输入的,比如,100 但是对于用户,如果输入,100' OR '1'='1 结果最终产生的sql, SELECT * FROM ProductsTbl WHERE Price < '100.00' OR '1' = '1' ORDER BY ProductDescription; 这样用户可以获取所有的商品信息 再看个例子, 对于用户身份认证,需要输入用户名和密码 但是如果用户在密码里面加

SQL注入专题--整理帖

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉.        随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获

SQL注入与xss

1. 什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通过递交参数构造巧妙的SQL语句,从而成功获取想要的数据. 2. SQL注入的种类 从具体而言,SQL注入可分为五大类,分别是:数字型注入.字符型注入.搜索型注入(like).in型的注入.句语连接型注入. 从应用来说,要特别注意IP.搜索.批量删除.从数据库转到数据库等地方的SQL注入. 3. 如何防止SQL注入 3.1 SQL注入产生的原因

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

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

mysql 之sql注入详解

SQL 注入( SQL Injection )攻击是发生在应用程序中的数据库层的安全漏洞.简而言之,是在输入的字符串之中注入 SQL 语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的 SQL 语句就会被数据库服务器误认为是正常的 SQL 语句而运行,攻击者就可以执行计划外的命令或访问未被授权的数据. SQL 注入已经成为互联网世界 Web 应用程序的最大风险.我们有必要从开发.测试.上线各个环节对其进行防范.以下将介绍 SQL 注入的原理及如何预防 SQL 注入. SQL 注入的原理有

10个SQL注入工具(转载)

众所周知,SQL注入攻击是最为常见的Web应用程序攻击技术.同时SQL注入攻击所带来的安全破坏也是不可弥补的.以下罗列的10款SQL注入工具可帮助管理员及时检测存在的漏洞. BSQL Hacker 10个SQL注入工具 BSQL Hacker是由Portcullis实验室开发的,BSQL Hacker 是一个SQL自动注入工具(支持SQL盲注),其设计的目的是希望能对任何的数据库进行SQL溢出注入. BSQL Hacker的适用群体是那些对注入有经验的使用者和那些想进行自动SQL注入的人群.BS

sql注入攻防 以php+mysql为例

随着Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了Web开发的行列.但是由于程序员的水平参差不齐或是安全意识太低,很多程序员在编写代码时仅考虑了功能上的实现,很少或是根本没有考虑应用的安全性问题.这就导致了很多应用都存在不同程度的安全漏洞.SQL注入便是其中的一种. SQL注入作为一种很流行的攻击手段,一直以来都受到网络安全研究者和黑客们的广泛关注.那什么是SQL注入呢?SQL注入是这样一种攻击技术:攻击者通过把恶意SQL命令插入到Web表单的输