如何避免sql注入 避免SQL注入三大方法

要说SQL注入还要从看.NET视频开始说起,听说在程序开发过程中,我们经常会遇到SQL注入问题,也就是指令隐码攻击。具体的原理到底是怎么回事儿,查了些资料好像涉及到了编译原理,也没能够看明白,只是视频中讲到了这三种方法是经常用来避免SQL注入最常用的方法,于是查些资料希望能对现学的知识有一定的了解。下面是对这三种方法具体如何使用的一个简单的介绍。

一、存储程序

???????? 在学习数据库视频的时候接触过,它是存储在数据库中的一些事先编译好的指令。在用的时候不用重新编写,直接调用就好了。所以,使用它可以大大提高程序的执行效率。

那么,如何创建一个存储程序并使用它呢?这是我们今天要解决的问题。

???????? 1.创建过程

??????????? 可编程性――下拉菜单――存储过程――右键――查询菜单―――指定模板参数的值――新建查询――输入语句――查询菜单中的分析检查语法是否正确――执行

??????? 2.具体创建语法

在创建存储程序时,为了应对各种变换的数据,通常会涉及到带参数的存储程序,其中参数用@来表示。

Create Procedure procedurename[:number] --[:number]表示一组存储程序中的第几个,如果只有一个,此参数可忽略

[@parameter data_type] [default] [OUTPUT] --@parameter表示存储过程中的参数,default 表示默认值,OUTPUT表示输出值即输出值 as SqlStatement --[]代表可选参数

???????? 3.具体执行过程

exec[ute] procedurename [参数]

?????? 举例:

--创建

CreateProcedure scores @score1smallint, @score2smallint, @score3smallint, @score4smallint, @score5smallint, @myAvgsmallint Output --Output可用return来代替

As select @myAvg=(@score1+@score2+@score3+@score4+@score5)/5 --调用过程

Declare@avgscore smallint --将输出结果放在avgscore中

Execavgscore Output 5,6,7,8,9, --带有参数的存储过程调用时,必须加上Output关键字,否则SQL会当做参数来对待

?? 小结:存储程序的创建可分为带参数和不带参数,以及含有默认值和输出值得存储程序,但是它们的使用原理是一样的。只是带输出值得存储程序在调用过程中要使用关键字Output来对要输出的变量进行声明,否则SQL会将它当做参数来处理。

注意:创建存储程序后,我们可以在编写程序时,直接调用存储程序的名称来代替复杂的查询语句:

strSQL="select ............;" strSQL="Execute procedureName;"

二、参数化SQL

????是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,用@或?来表示参数。

避免SQL注入三大方法_防止sql注入

??? 在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成?SQL 指令的编译后,才套用参数运行,因此就算参数中含有恶意的指令,由于已经编译完成,就不会被数据库所运行,因此,可从一定程度上避免SQL注入。

参数化SQL在不同数据库中支持的方式有一定的差别。SQL server中二者均支持。

在不用的数据库上基本语法都是一样的,但在不同的运行平台上客户端的书写有不同之处,在这里就拿现在我正在学习的SQL server在.net上执行来举例。

--SQL server中的参数化SQL语句: SELECT * FROM myTable WHERE myID = @myID INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)'.在.NET上执行

SqlCommand sqlcmd = new SqlCommand("INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)", sqlconn);

sqlcmd.Parameters.AddWithValue("@c1", 1); ' 设定参数 @c1 的值。

sqlcmd.Parameters.AddWithValue("@c2", 2); ' 设定参数 @c2 的值。

sqlcmd.Parameters.AddWithValue("@c3", 3); ' 设定参数 @c3 的值。

sqlcmd.Parameters.AddWithValue("@c4", 4); ' 设定参数 @c4 的值。

sqlconn.Open();

sqlcmd.ExecuteNonQuery();

sqlconn.Close();

在向command中增加参数时,还有其他的方法,如:

sqlcmd.parameters.Add("@c1",SqlDbType.BigInt) 'BigInt为c1的数据类型

sqlcmd.parameter("@c1").value=1 '设定值

如何避免sql注入 避免SQL注入三大方法

三、Regular Expression

???? 简称REs是一种非常强大的文字验证技术。通常我们在设计程序时,如果要在TEXT中输入数字的话,那么我们会用到IsNumberic函数来限制,但是很多情况,为了用户方便,我们不止要用到限定数字这一个技术,还有很多关系式需要我们去遵循,如手机号码要限定成11为,邮箱号码要限制相应的格式等。这时候就用到了REs这种技术。它可以为我们要输入的内容提供一个模板,让用户的输入必须遵循这个模板的格式,如果格式不正确,则程序不能继续执行。这样也可以避免SQL注入。

例如

d?? -------代表数字

d{5}? -------代表5位数字

w+@w+ -------@前的w+表示要有至少一个的字符,@代表这个模板中必须有一个@字符。

当然在使用这种技术之前,是有条件的,首先,它需要引用一个命名空间,具体如下:

Imports RE=System.Text.RegularExpressions.Regex

这样还不够,我们需要一个方法来做验证用户输入是否正确的工作,这里,我们要用到一个方法match,具体使用如下:

Dim input,pattern As String

Input=Me.txtInput.TextTrim()

Pattern=Me.txtPattern.Text

If Re.Mathc(input,pattern).Success Then ‘使用Match方法来对用户输入的内容与定义好的模板进行验证

MessageBox.Show("True,input matches pattern") Else MessageBox.Show("False,input does not match pattern") End if

避免SQL注入三大方法_防止sql注入

以上,是通过看.net视频总结出来的避免SQL注入的三种方法,由于对专业知识了解有限,具体原理并不清楚,有待以后深入学习后总结。?

  

爱华网本文地址 » http://www.413yy.cn/a/8104420103/266641.html

更多阅读

如何避免运动损伤? 如何预防运动损伤

如何避免运动损伤?——简介在健身中运动损伤是难以避免的,但是大家要尽量避免的,以下方法大家要了解一下。如何避免运动损伤?——方法/步骤如何避免运动损伤? 1、选择自己感兴趣并且适合自己锻炼的方式进行锻炼,并且最好在锻炼之前做好

如何避免怀孕 精 避免意外怀孕

如何避免怀孕 精——简介有时候夫妻之间还没有准备好要迎接一个新生命的到来;有时候某一方正好身体不适,为了优生,暂时不能要宝宝……这时候就需要考虑做好避孕的工作。如何避免怀孕 精——方法/步骤如何避免

加湿器有什么危害如何避免? 精 空气加湿器的危害

加湿器有什么危害如何避免? 精——简介冬天到了,由于空调、暖气开放,室内的空气非常干燥,很自然的就用到了加湿器,加湿器要如何使用才能达到增加空气湿度的效果呢?使用过程中又有神马危害可以防御呢?加湿器有什么危害如何避免? 精——工

facebook帐号被锁怎么解决如何避免 facebook帐号

小编今天在这里来讲解下facebook帐号被锁,我们怎么半,如何避免呢大家都说一个IP不能同时登入多个facebook帐号,那么我们怎么办才可以同时登入多个facebook呢,这个我想对于在facebook上做些别的事情是很有好处的,关于怎么注册验证facebook

声明:《如何避免sql注入 避免SQL注入三大方法》为网友我爱人字拖分享!如侵犯到您的合法权益请联系我们删除