作者:陈能技
安全性测试是一项迫切需要进行的测试,测试人员需要像黑客一样攻击软件系统,找到软件系统包含的安全漏洞。
1.网页安全漏洞检测
一些设计不当的网站系统可能包含很多可以被利用的安全漏洞,这些安全漏洞如同给远程攻击者开了一个后门,让攻击者可以方便地进行某些恶意的攻击。例如,公共漏洞和披露网站CVE(CommonVulnerabilitiesandExposures)公布了ElementInstantShop中的Web网页add_2_basket.asp的一个漏洞项,允许远程攻击者通过隐藏的表单变量“price”来修改价格信息。这个表单的形式如下所示:
<INPUTTYPE=HIDDENNAME="id"VALUE="AUTO0034">
<INPUTTYPE=HIDDENNAME="product"VALUE="BMW545">
<INPUTTYPE=HIDDENNAME="name"VALUE="ExpensiveCar">
<INPUTTYPE=HIDDENNAME="price"VALUE="100">
利用这个漏洞,不怀好意者可以任意设定price字段的值,然后提交给InstantShop网站的后台服务器,从而可能用100美元就可以获得一部BMW545。
技巧:发现类似的安全漏洞的最好方法是进行代码审查。除了代码审查,测试人员还可以利用一些测试工具进行检查,例如:PaesslerSiteInspector、WebDeveloper等。
2.SQL注入
SQL注入是另外一个经常忽略的安全漏洞,但是SQL注入同时也是一种非常普遍的代码漏洞,它会导致数据库端的敏感数据泄漏,或者服务器受到黑客的控制。例如,下面的一段代码就存在SQL语句的注入漏洞。
SqlConnectionsqlcon=sqlconnA;
//打开连接
sqlcon.Open();
//组合一条查询语句
SqlCommandcmd="selectcount(*)fromUserwhereLogonName=‘"+this.textBox1.Text+”’andPassword=‘”+this.textBox2.Text;
SqlDataAdapteradpt=newSqlDataAdapter(cmd,sqlcon);
DataSetds=newDataSet();
adpt.Fill(ds);
//关闭连接
sqlcon.Close();
//如果返回数据不为空,则验证通过
If(ds.Tables[0].Rows.Count>0)
{
retuentrue;
}
else
{
Returnfalse;
}
这段代码从textBox1获得用户输入的用户名,从textBox2获得用户输入的密码,然后执行数据库查询操作。假设在textBox1的输入框输入一个已知的用户名,然后再做一些手脚,则可以不输入密码也能登录系统。这个字符串利用了SQLServer对单引号的处理方式,只要简单地组合成类似下面的字符串并输入到textBox1的输入框中即可。
Admin'or'1'='1
这样就可以利用已知的Admin账号,不输入密码就能登录系统。因为给预期的SQL语句注入了额外的语句,所以实际上提交到SQLServer数据库执行的语句变成了如下所示的语句:
selectcount(*)fromuserwhereLogonName='Admin'or'1'='1'andPassword=''
由于1=1是恒等的,因此返回的结果肯定为真,从而干扰了用户信息的正常验证,导致能绕过密码验证而登录系统。
技巧:检查是否存在SQL语句注入漏洞的最好办法是代码审查,查看所有涉及SQL语句提交的地方,是否正确处理了用户输入的字符串。
3.缓冲区溢出
不仅仅是连上Internet的软件系统才会有安全问题,个人软件系统或公司内部的软件系统也存在安全问题,这些安全问题不会导致信用卡密码的泄漏,但是可能导致工作成果的丢失。如果软件系统是采用C语言这类容易产生缓冲区溢出漏洞的语言开发的话,作为测试人员就要注意检查可能造成系统崩溃的安全问题了。
例如,下面的两行C语言代码就可能造成缓冲区的溢出问题:
charbuf[20];
gets(buf);
如果使用gets函数来从stdin读入数据,则可能出现缓冲区溢出的问题。另外一个例子如下:
charbuf[20];
charprefix[]="http://";
strcpy(buf,prefix);
strncat(buf,path,sizeof(buf));
这里问题出现在sizeof的参数不应该是整个buf的大小,而是buf的剩余空间大小。
技巧:测试人员需要对每一个用户可能输入的地方尝试不同长度的数据输入,以验证程序在各种情况下正确地处理了用户的输入数据,而不会导致异常或溢出问题。或者通过代码审查来发现这些问题。还可以利用一些工具来帮助检查这类问题,例如AppVerifier等。
分享到:
相关推荐
软件测试技术——系统测试.ppt 系统测试是软件测试技术中的一种重要测试方法,它的主要目的是为了发现缺陷并度量产品质量。系统测试可以分为不同的阶段,包括单元测试、集成测试、系统测试和验收测试。系统测试的...
在学习过程中,可以参考“软件测试技术.ppt”这份资料,它将帮助你逐步掌握软件测试的理论知识和实践经验,为你的职业生涯打下坚实的基础。记住,软件测试不仅仅是找出问题,更是预防问题,提升软件质量的关键所在。...
在软件开发过程中,软件测试是不可或缺的一环,它确保了产品的质量和稳定性。本文将深入探讨软件测试技术,包括测试流程、测试方法以及常用的测试工具,旨在为初学者提供全面的入门指南。 首先,我们来了解软件测试...
根据提供的文件信息,“软件测试藏宝图——测试行业必看”这张图似乎为软件测试领域的新手或希望进入该领域的人员提供了一条清晰的学习路径。接下来我们将深入探讨软件测试领域的一些核心概念、技能以及如何成为一名...
在IT行业中,软件安全性测试是确保应用程序免受潜在威胁和攻击的关键环节。Graw的这篇论文集中探讨了这个至关重要的主题,旨在为开发者、测试人员和安全专家提供深入的理论和实践指导。以下是对该论文内容的详细解读...
综上所述,"软件安全实现——安全编程技术"涵盖了广泛的实践和理论知识,从基础的安全原则到高级的加密策略,从代码审查到安全测试,都是保障软件安全不可或缺的部分。作为软件设计人员,掌握这些技术不仅能提高软件...
这份名为“软件测试资料——从基础开始”的资源包,旨在为初学者提供一个全面了解软件测试的起点,涵盖了从基本概念到实践方法的多个方面。让我们深入探讨一下其中可能涉及的知识点。 首先,软件测试基础是学习任何...
这部分可能涵盖负载测试、压力测试、安全性测试、移动应用测试、Web服务测试等。例如,性能测试工具如LoadRunner和JMeter用于模拟大量用户并发访问,以评估系统的稳定性和响应速度。安全测试则涉及SQL注入、XSS攻击...
4. 性能和安全性测试:在当今的数字化时代,软件性能和安全性至关重要。可能的内容会涉及压力测试、负载测试、安全审计和渗透测试等,这些都是保证软件稳定性和抵御攻击的关键环节。 5. 测试管理:有效的测试管理...
《软件测试——测试计划》是指导软件开发过程中关键阶段,如集成测试、系统测试和验收测试的规划文档。本文档不适用于单元测试计划,因为单元测试通常由开发人员在编码阶段进行,关注单个模块的功能正确性。以下将对...
测试不仅查找错误,还评估软件性能、兼容性、安全性等多方面特性。 二、软件测试的重要性 1. 错误预防:通过测试可以尽早发现潜在问题,避免在生产环境中出现故障。 2. 用户满意度:高质量的产品可以提升用户满意度...
### 软件测试——功能测试用例库详解 #### 一、引言 随着软件开发项目的日益复杂,确保软件质量已成为项目成功的关键因素之一。软件测试作为保证软件质量的重要手段,其有效性直接关系到软件产品的可靠性和用户体验...
软件测试的目的是为了确保软件的质量、可靠性和安全性。在软件测试中,需要检查软件的各个方面,包括功能、性能、安全性、可用性和兼容性等。 知识点1:软件测试的重要性 软件测试是软件开发过程中不可或缺的一...
- 接口与路径测试、功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试和安装/反安装测试等都是测试的重要组成部分。 - 不同测试阶段有其特定的测试内容和方式,如单元测试主要验证...
在本软件测试教程的第二部分中,我们将深入探讨软件测试的核心概念、方法和技术,以便对这一关键领域有更深入的理解。软件测试是确保产品质量的重要环节,它涉及到在软件开发过程中发现并修复错误,以提高软件的可靠...
《测试用例——一本让你对软件测试更了解的书》这一章节深入探讨了软件测试中的核心环节——测试用例的编写与管理。测试用例,作为软件测试工程师的“编程”,其重要性不言而喻。它不仅是检测软件缺陷、验证功能是否...
3. 安全性测试:查找可能的漏洞和弱点,确保数据保护和访问控制。 4. 兼容性测试:测试软件在不同操作系统、浏览器、硬件配置下的运行情况。 5. 用户界面测试:评估软件的易用性和视觉一致性。 6. 压力测试:模拟...
### 软件测试——常见测试术语合集 在软件开发过程中,软件测试扮演着至关重要的角色,确保软件产品的质量与稳定性。为了更好地理解和运用这些测试技术,本篇文章将详细介绍一系列常用的软件测试术语及其含义。 ##...
"2008软件测试技术-chap6.ppt"可能涵盖的是安全性测试,这是保障用户数据和系统安全的重要环节。这部分内容可能涉及漏洞扫描、渗透测试,以及如何防止SQL注入、XSS攻击等常见安全威胁。 "2008软件测试技术-chap7....