软件测试技术之安全性测试

安全性测试是一项迫切需要进行的测试,测试人员需要像黑客一样攻击软件系统,找到软件系统包含的安全漏洞。


1.网页安全漏洞检测


一些设计不当的网站系统可能包含很多可以被利用的安全漏洞,这些安全漏洞如同给远程攻击者开了一个后门,让攻击者可以方便地进行某些恶意的攻击。例如,公共漏洞和披露网站CVE(Common Vulnerabilities and Exposures)公布了Element InstantShop中的Web网页add_2_basket.asp的一个漏洞项,允许远程攻击者通过隐藏的表单变量“price”来修改价格信息。这个表单的形式如下所示:


<INPUT TYPE = HIDDEN NAME = "id" VALUE = "AUTO0034">
<INPUT TYPE = HIDDEN NAME = "product" VALUE = "BMW545">
<INPUT TYPE = HIDDEN NAME = "name" VALUE = "Expensive Car">
<INPUT TYPE = HIDDEN NAME = "price" VALUE = "100">


利用这个漏洞,不怀好意者可以任意设定price字段的值,然后提交给InstantShop网站的后台服务器,从而可能用100美元就可以获得一部BMW545。


技巧:发现类似的安全漏洞的最好方法是进行代码审查。除了代码审查,测试人员还可以利用一些测试工具进行检查,例如:Paessler Site Inspector、Web Developer等。


2.SQL注入


SQL注入是另外一个经常忽略的安全漏洞,但是SQL注入同时也是一种非常普遍的代码漏洞,它会导致数据库端的敏感数据泄漏,或者服务器受到黑客的控制。例如,下面的一段代码就存在SQL语句的注入漏洞。


SqlConnection sqlcon = sqlconnA;


//打开连接
sqlcon.Open();


//组合一条查询语句
SqlCommand cmd = "select count(*) from User where LogonName = ‘" + this.textBox1.Text +”’ and Password = ‘”+this.textBox2.Text;


SqlDataAdapter adpt = new SqlDataAdapter(cmd, sqlcon);


DataSet ds = new DataSet(); 
adpt.Fill(ds);
//关闭连接
sqlcon.Close();


//如果返回数据不为空,则验证通过
If(ds.Tables[0].Rows.Count>0)
{
retuen true; 
}
else
{
Return false;
}


这段代码从textBox1获得用户输入的用户名,从textBox2获得用户输入的密码,然后执行数据库查询操作。假设在textBox1的输入框输入一个已知的用户名,然后再做一些手脚,则可以不输入密码也能登录系统。这个字符串利用了SQL Server对单引号的处理方式,只要简单地组合成类似下面的字符串并输入到textBox1的输入框中即可。


Admin' or '1' = '1


这样就可以利用已知的Admin账号,不输入密码就能登录系统。因为给预期的SQL语句注入了额外的语句,所以实际上提交到SQL Server数据库执行的语句变成了如下所示的语句:


select count(*) from user where LogonName = 'Admin' or '1'='1' and Password=''


由于1=1是恒等的,因此返回的结果肯定为真,从而干扰了用户信息的正常验证,导致能绕过密码验证而登录系统。


技巧:检查是否存在SQL语句注入漏洞的最好办法是代码审查,查看所有涉及SQL语句提交的地方,是否正确处理了用户输入的字符串。


3.缓冲区溢出


不仅仅是连上Internet的软件系统才会有安全问题,个人软件系统或公司内部的软件系统也存在安全问题,这些安全问题不会导致信用卡密码的泄漏,但是可能导致工作成果的丢失。如果软件系统是采用C语言这类容易产生缓冲区溢出漏洞的语言开发的话,作为测试人员就要注意检查可能造成系统崩溃的安全问题了。


例如,下面的两行C语言代码就可能造成缓冲区的溢出问题:


char buf[20];
gets(buf);


如果使用gets函数来从stdin读入数据,则可能出现缓冲区溢出的问题。另外一个例子如下:


char buf[20];
char prefix[] = "http://";
strcpy(buf,prefix);
strncat(buf,path,sizeof(buf));


这里问题出现在sizeof的参数不应该是整个buf的大小,而是buf的剩余空间大小。


技巧:


测试人员需要对每一个用户可能输入的地方尝试不同长度的数据输入,以验证程序在各种情况下正确地处理了用户的输入数据,而不会导致异常或溢出问题。或者通过代码审查来发现这些问题。还可以利用一些工具来帮助检查这类问题,例如AppVerifier等。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及软件测试信息安全性面试题时,以下是一些常见的问题和答案: 1. 什么是软件测试信息安全性软件测试信息安全性是指在软件测试过程中,确保软件系统的机密性、完整性和可用性的一系列措施和实践。它旨在保护软件系统免受未经授权的访问、数据泄露、数据篡改和服务中断等安全威胁。 2. 请列举一些常见的软件测试信息安全性威胁。 - SQL注入:攻击者通过在输入字段中插入恶意SQL代码来获取敏感数据或破坏数据库。 - 跨站脚本攻击(XSS):攻击者通过在网页中插入恶意脚本来窃取用户信息或篡改网页内容。 - 跨站请求伪造(CSRF):攻击者通过伪造合法用户的请求来执行未经授权的操作。 - 会话劫持:攻击者通过窃取用户的会话标识符来冒充合法用户。 - 拒绝服务攻击(DoS):攻击者通过发送大量请求或占用系统资源来使系统无法正常工作。 3. 请介绍一些常用的软件测试信息安全性技术和方法。 - 静态代码分析:通过对源代码进行分析,检测潜在的安全漏洞和弱点。 - 动态安全测试:通过模拟真实攻击场景,测试系统的安全性能和弱点。 - 渗透测试:通过模拟黑客攻击,评估系统的安全性并发现潜在的漏洞。 - 安全审计:对系统进行全面的安全性评估和审查,确保符合相关安全标准和法规要求。 - 加密和身份验证:使用加密算法和身份验证机制来保护敏感数据和用户身份。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值