一般来说,版本功能测试完成,对应的用例也实现了自动化,性能、兼容、稳定性测试也完成了以后,我们就需要考虑到系统的安全问题,特别是涉及到交易、支付、用户账户信息的模块,安全漏洞会带来极高的风险。
一.安全测试原则与常见的安全威胁:
1.安全需求:
※认证:对认证的用户的请求返回
※访问控制:对未认证的用户的权限控制和数据保护
※完整性:用户必须准确的收到服务器发送的信息
※机密性:信息必须准确的传递给预期的用户
※可靠性:失败的频率是多少?网络从失败中恢复需要多长时间?采取什么措施来应对灾难性的失败?(个人理解这个地方应该更偏向于容错容灾测试的范畴)
※不可抵赖:用户应该能证明接收到的数据来自特定的服务器
2.常见的安全测试内容
权限控制
SQL注入
URL安全测试
XSS(跨站脚本攻击)
CSRF(跨站请求伪造)
URL跳转漏洞
其他安全方面的考量
接下来,我们以一个C#实现的下常见的MVC架构网站为例,来分析具体的各个安全测试角度。
二.权限控制
权限控制相对来说比较简单,功能测试的过程中也接触过不少,主要就是考虑以下方面:
1.用户权限:我们假设存在两个用户A,B;其中A的权限级别很高,B的权限级别则很低:
只有A能进行的操作,B能不能进行操作;
只有A能看到的页面,B能不能看到;
2.页面权限:
必须登录才能看到的页面,不登录直接访问能否看到?
通常来说单纯的权限控制页面测试不复杂,但是因为权限控制和后续的URL跳转、Session等方面结合的比较紧密,所以单独提出来。
三.SQL注入
1.SQL注入原理
以Sql Sever为例,C#提供了两种操作数据库的方法,以实现Sql Sever的查询功能为例(Mysql只需要将Sql对象替换为MySql对象即可):
A.直接使用传入的Sql进行数据库操作:
public static DataSet QuerySql(string sSql) { DataSet ds = new DataSet(); try { Open(); SqlDataAdapter mDataAdpter = new SqlDataAdapter(sSql, conn); mDataAdpter.Fill(ds); } catch (SqlException ex) { throw new Exception(ex.Message); DataBaseException = ex.Message; } finally { conn.Close(); } return ds; }