安全性编程结课论文Word格式.docx
- 文档编号:17534516
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:8
- 大小:85.44KB
安全性编程结课论文Word格式.docx
《安全性编程结课论文Word格式.docx》由会员分享,可在线阅读,更多相关《安全性编程结课论文Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
2014年6月15日
目录
1安全性编程的简介1
2SQL注入漏洞1
2.1SQL注入漏洞简介1
2.2SQL注入漏洞的分类2
2.3SQL注入的具体实例2
2.4SQL注入的原理4
3SQL注入漏洞的防范4
3.1SQL注入漏洞防范方法4
3.2登录问题SQL注入详细防范过程4
3.3存储过程解决漏洞问题原理6
4总结与体会6
1安全性编程的简介
谈到安全性编程,顾名思义就是如何让编写出来的软件更加安全,更加耐用。
只有安全可靠的软件才能给人们带来巨大的利益。
但是,要明白什么是安全性编程,我们就要首先要明白几个概念。
首先,我们要知道什么是软件。
在1983年IEEE为软件下的定义是:
计算机程序、方法、规则和相关的文档资料以及在计算机上运行时所需要的数据。
目前对软件通俗的解释为:
软件=程序+数据+文档资料。
再者,软件还有不同的分为。
比如按照功能可以分为:
系统软件、支撑软件、应用软件等等。
以上是对软件一个小小的解释,在我们明白了什么是软件后再来看一下什么是软件安全。
其实,所谓的软件安全就是:
采取工程的方法使得软件在敌对攻击的情况下仍能够继续正常工作。
及采用系统化、规范化、数量化的方法来指导构建安全的软件。
其实,在好多程序员的心中,如何实现功能才是最重要的。
只要实现了功能一切都可以忽略。
但是,这种观点是不对的。
编写出程序是很重要的,因为没有一个能运行的程序什么都没法谈。
但如果这个程序存在着很大的安全隐患,那么即使能运行我们也看作是一个废程序。
如果安全不重要,那么像如淘宝,京东,亚马逊等网站会天天出问题的。
从风险分析的角度出发,软件安全是关于如何理解软件所引起的安全风险以及如何管理这些风险的科学。
McGraw博士提出“使安全成为软件开发的必须部分”的观点,已经得到了工业界和政府机构的认同,美国国土安全部下属的国家网络安全处专门建立了BSI网站,并于美国国家标准技术研究所、国际标准化组织以及电气电子工程师协会一起共同维护这个网站。
由此看来,软件安全非常重要。
我们已经对软件安全有了一个大概的了解,也看到了它的重要性。
下面我们将对其中的一个安全漏洞来进行下认识与探究,即SQL注入漏洞
2SQL注入漏洞
2.1SQL注入漏洞简介
SQL注入漏洞是web系统特有的一种漏洞,源于PHP、ASP等脚本语言对用户输入数据的错误解析。
网站开发程序员在编写代码时,没有对用户输入信息数据的合法性进行半段,使得应用程序存在安全隐患。
用户可以提交一段数据库查询代码,根据程序返回的结果获得一些他们想知道的信息。
这就是所谓的SQL注入。
2.2SQL注入漏洞的分类
1.盲注(BlindInjection)——在服务器没有回显时完成的注入攻击。
常见的方法有:
构造简单的条件语句(’or1=10--),根据返回来的数据来判断sql语句是否执行了。
2.TimingAttack——盲注高级技巧
BENCHMARK(count,expr)函数——将表达式expr执行count次
利用BENCHMARK()函数,可以让同一个函数执行若干次,使得结果返回的时间比平时长;
通过时间长短的变化,可以判断出注入语句是否执行成功。
2.3SQL注入的具体实例
下面我们通过一个简单的登录小事例看一下SQL注入是如何存在的。
protectedvoidButton1_Click(objectsender,EventArgse)
{
using(SqlConnectionconn=newSqlConnection(ConfigurationManager.ConnectionStrings["
testConnectionString"
].ConnectionString))
Stringstr="
select*fromusertablewhereusername='
"
+usertxt.Text+"
'
andpassword='
+passwordtxt.Text+"
;
using(SqlCommandcommand=newSqlCommand(str,conn))
conn.Open();
using(SqlDataReaderreader=command.ExecuteReader())
if(reader.Read())
Response.Write("
<
script>
alert('
恭喜您,登录成功'
)<
/script>
);
else
对不起,登录失败'
}
以上是一段登录的小程序,当我们运行时,可以得出以下结果:
但是如果当我们不知道user1的密码时,我们把密码写成’or1=1–也是可以登录成功的。
如下:
如此看来,这个程序存在着一些隐患问题。
但是,为什么会出现这样的问题呢?
下面就让我们来探究下出现这种问题的根本原因。
2.4SQL注入的原理
其实,出现SQL注入的情况主要的原因是ASP等脚本错误的把用户输入的信息当作成了代码。
在以上的例子中就是利用了字符串拼接的缺陷满足了再不知道用户密码的情况下就成功的登录了。
具体分析如下:
当用户在文本框中输入’or1=1—时,代码中的str字符串就变成了
“select*fromusertablewhereusername=’user1’andpassword=’’or1=1--”。
当此语句再进行判断的时候,即使password等于空,但是1=1是始终为true的。
因此,只要用户名为true,密码不论是什么都是为true的。
因此,不管知不知道密码都是可以登录成功的。
由此看来,SQL的注入就是巧妙的运用了字符串的拼接,将用户输入信息和代码巧妙的结合起来,以此来达到自己的目的。
3SQL注入漏洞的防范
3.1SQL注入漏洞防范方法
如何做到防范呢?
其实很简单,就是采取一些措施方法来避免漏洞的出现。
如今有一下几种方法得以借鉴:
1.使用SQL注入攻击自动化的工具进行参透测试。
如用NBSI2.0对网上的一些ASP网站稍加扫描,就能发现许多ASP网站存在SQL注入漏洞。
一些自动化扫描工具也可以帮助监测网站中的SQL注入漏洞,例如NGS公司的产品NGSSQuirreL。
2.有些文献建议在Web服务器运行时进行实时的入侵监测,处理问题的位置位于脚本程序与数据之间。
用到的方法包括对SQL语句进行语法分析来识别谓词结构;
用状态机来描述SQL谓词逻辑等。
3.借鉴静态代码分析的相关技术等。
3.2登录问题SQL注入详细防范过程
对于登录问题的解决方法有两种,分别为:
参数化查询和存储过程。
下面对如何用存储过程方法来解决登录代码中的漏洞:
第一步:
在数据库中建立一个存储过程。
ALTERPROCEDURE[dbo].[GetLogin]
(
@usernamenvarchar(50),
@passwordnvarchar(50)
)
AS
SELECT*FROMusertableWHERE
username=@usernameAND
password=@password
第二步:
修改ASP中的代码
using(SqlCommandcommand=newSqlCommand("
GetLogin"
conn))
command.CommandType=CommandType.StoredProcedure;
command.Parameters.Add(newSqlParameter("
username"
usertxt.Text));
password"
passwordtxt.Text));
这样,在运行后就会告诉你对不起,登录失败了。
3.3存储过程解决漏洞问题原理
利用存储过程解决登录SQL注入漏洞问题的原理很简单。
针对出现这个问题的根本原因,我们利用存储过程来避免ASP中字符串的拼接问题。
将字符穿放大数据库中,让存储过程来完成SQL语句的执行。
在ASP中,只需要将需要的参数值传给存储过程即可。
数据库中的字符串不是来拼接的,因此就不会出现字符串拼接问题,登录中的SQL注入问题就解决了。
4总结与体会
学习了安全性编程方法课程后,对软件又有了一个新的认识。
之前,总认为如何实现功能才是最重要的,其他的都可以不去在乎。
然而学了这门课程后觉得软件的安全同样的重要。
其实,软件安全是对一个程序员更要的要求,因为漏洞之所以产生是因为有些方法或者语法我们不明白其原理是什么,只知道如何去用,但是对于它是怎么工作的却不怎么了解。
比如堆栈溢出,内存泄漏,我们只有明白了什么堆栈以及它们在内存中是怎么工作的,我们才能明白什么情况下编写什么样的代码会造成溢出,明白了溢出的原理我们也就明白了如何来防范
总之,学习这门课给了我一个很宽阔的视野。
明白了软件安全也很重要。
如何安全性的编程也是一个需要学习和必须养成的一个良好习惯。
作为一个合格的程序员不仅要实现功能而且要让实现的功能安全可靠耐用。
只有安全的软件才是一个值得为人民服务的好软件。
参考文献:
[1]《软件安全》作者任伟国防工业出版社。
[2]网上某君的关于SQL注入的博文。
[3]许晓华老师的教学课件《10_web编程安全_SQL注入漏洞》。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安全性 编程 论文