避免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, --带有參数的存储过程调用时,必须加上Outputkeyword,否则SQL会当做參数来对待
小结:存储程序的创建可分为带參数和不带參数,以及含有默认值和输出值得存储程序,可是它们的使用原理是一样的。
仅仅是带输出值得存储程序在调用过程中要使用keywordOutput来对要输出的变量进行声明,否则SQL会将它当做參数来处理。
注意:创建存储程序后,我们能够在编敲代码时,直接调用存储程序的名称来取代复杂的查询语句:
strSQL="select ............;"
strSQL="Execute procedureName;"
二、參数化SQL
是指在设计与数据库链接并訪问数据时,在须要填入数值或数据的地方,使用參数 (Parameter) 来给值,用@或?来表示參数。
在使用參数化查询的情况下。数据库服务器不会将參数的内容视为SQL指令的一部份来处理,而是在数据库完毕 SQL 指令的编译后,才套用參数运行,因此就算參数中含有恶意的指令。因为已经编译完毕,就不会被数据库所运行,因此,可从一定程度上避免SQL注入。
參数化SQL在不同数据库中支持的方式有一定的区别。SQL server中二者均支持。
在不用的数据库上基本的语法都是一样的。但在不同的运行平台上client的书写有不同之处,在这里就拿如今我正在学习的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 '设定值
三、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
以上,是通过看.net视频总结出来的避免SQL注入的三种方法,因为对专业知识了解有限。详细原理并不清楚。有待以后深入学习后总结。
避免SQL注入三慷慨法的更多相关文章
- WEB 安全之 SQL注入 < 三 > 提权
SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...
- SQL注入(三)
邮给我一个密码 我们意识到虽然不能添加一条新的记录在members表中,但我们可以通过修改一个存在的记录, 这也获得了我们的证明是可行的. 从先前的步骤中,我们知道bob@example.com在系统 ...
- 常见的网络攻击(XSS,SQL注入,CSRF)
一.XSS 二.SQL注入 三.CSRF
- Python--day46--mysql存储过程(不常用)(包含防sql注入)
一.存储过程: 优点:只要传很少的数据到数据库就可以了 缺点:dba管理数据库的时候可能会对数据库进行了更改了那一坨sql语句. 二.创建存储过程: 1.简单 创建存储过程: Python中使用结果 ...
- SQL注入之Sqli-labs系列第三十八关、第三十九关,第四十关(堆叠注入)
0x1 堆叠注入讲解 (1)前言 国内有的称为堆查询注入,也有称之为堆叠注入.个人认为称之为堆叠注入更为准确.堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据 ...
- 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击
第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击 sql注入攻击 也就是黑客通过表单提交的地方,在表单里输入了sql语句,就是通过SQL语 ...
- 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入
一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...
- SQL注入过WAF(11.4 第三十三天)
WAF是什么? Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).也叫Web防火墙,主要是对Web特有入侵方式的加强防护,如D ...
- DVWA(三):SQL injection 全等级SQL注入
(本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...
随机推荐
- 阿里巴巴飞天大数据架构体系与Hadoop生态系统
很多人问阿里的飞天大数据平台.云梯2.MaxCompute.实时计算到底是什么,和自建Hadoop平台有什么区别. 先说Hadoop 什么是Hadoop? Hadoop是一个开源.高可靠.可扩展的分布 ...
- 线性dp——求01串最大连续个数不超过k的方案数,cf1027E 好题!
只写了和dp有关的..博客 https://www.cnblogs.com/huyufeifei/p/10351068.html 关于状态的继承和转移 这题的状态转移要分开两步来做: 1.继承之前状态 ...
- CCPC-Wannafly Summer Camp 2019 全记录
// 7.19-7.29 东北大学秦皇岛校区十天训练营,题目都挂在了Vjudge上.训练期间比较忙,没空更博总结,回来继续补题消化. Day1 这天授课主题是简单图论,节奏挺好,wls两小时理完图论里 ...
- PAT甲级——A1070 Mooncake
Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many types ...
- Eclipse反编译插件jd-eclipse安装指南
Java Decompiler是一款比较好用的反编译工具,包括: JD-GUI:独立java编译工具 JD_Eclipse:用于Eclipse的反编译插件 下面主要介绍jd-eclipse的获取和安装 ...
- 10-2-点击生成10个div
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- svn插件的所有链接
http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240
- Ubuntu18上安装Go和GoLand
第一步骤:安装Go 方式一: 使用 sudo apt-get install golang命令安装 ubuntu软件库里当前golang版本为1.10,(golang最新版为1.11),可满足要求. ...
- 二分判定 覆盖问题 BZOJ 1052
//二分判定 覆盖问题 BZOJ 1052 // 首先确定一个最小矩阵包围所有点,则最优正方形的一个角一定与矩形一个角重合. // 然后枚举每个角,再解决子问题 #include <bits/s ...
- c语言解决函数变参数问题 va_list
前言:看到sprintf,swprintf之类的可变参数格式化函数,是否想过我们能写一个自定义的类似的函数吗?答案是很定的,下面来介绍一种方法,用va_list,va_start, va_end来实现 ...