安全测试之参数校验
参数未经常规数据校验是导致安全问题的一个重要因素。无论是暴露给用户的接口,还是内部通信接口,攻击者都可以利用这些未经校验的参数伪造数据、运行恶意代码、修改数据库、修改配置文件、造成拒绝服务等。
事实上,除了参数校验外,业务逻辑也需要进行校验,否则攻击者可能会利用这之间的逻辑漏洞去恶意修改价格、账户余额、级别权限等。
参数校验安全问题包含XSS、SQL注入、命令执行、数据溢出和参数类型篡改。
参数校验测试中比较通用且常见的测试点
通用且常见的参数校验测试点1.防SQL注入测试
从如下表所示测试角度去测试系统是否有SQL注入方面的问题。防SQL注入测试的测试点:
2.防XSS测试
XSS(跨站脚本攻击)是最为普通的Web应用安全漏洞。几乎从Web应用诞生之日起,XSS攻击就存在了,发展至今XSS攻击方式已经演化了很多代,但是本质上都是利用Web编码不够健壮的问题。
1)不可信数据
预防XSS最重要的原则是不受信任的数据不应该在代码中被随意放置和传输,例如:
<script>...不要将不可信数据放在这里...</script> //放在script内
<!--...不要将不可信数据放在这里...--> //放在HTML注释内
<div ...不要将不可信数据放在这里...=test /> //放在属性名内
<不要将不可信数据放在这里... href="/test" /> //放在标签名内
<style> ...不要将不可信数据放在这里... </style> //放在CSS内
从下表所示测试角度去测试系统对不可信数据的处理是否存在问题。
2)cookie安全性
应测试cookie是否进行了安全性方面的设置,例如确定将secure属性设置为true,防止cookie在HTTP会话中以明文形式传输;确定将httponly属性设置为true,防止JS脚本读取cookie信息,防止XSS攻击。
3)使用框架、库或组件提高安全性
使用新版本有助于防止基于已知漏洞的XSS攻击。除此之外,也可以使用一些更安全的框架,如使用HtmlSanitizer、OWASP Java HTML Sanitizer等框架或库实现对HTML中的疑似XSS攻击进行清洗,使用AngularJS strict contextual escaping或者Go Templates等实现自动转义。
摘取自刘琛梅老师的《测试架构师修炼之道:从测试工程师到测试架构师 第2版》