常规安全测试项及方法——WEB应用基础版(用例方式描述)


前言

依据自己的经验整理常规的安全测试项及方法——WEB应用类
提示:文中涉及的相关工具及技术技巧,在此文中不做详细说明,有需要或感兴趣的朋友可私聊或关注后续博文,或自行百度相关。文中的预期结果或要求内容等均为举例说明,实际情况需依据需求而定。

一、基础框架安全

测试场景:框架安全
测试项目:基础框架
测试内容(方法):梳理应用程序使用的框架以及具体版本信息,通过查看框架官网以及互联网信息确定使用的框架是否存在已公布的版本漏洞,或使用中是否规避该漏洞。
测试工具:百度,官网查询,社区查询等

二、账号与认证安全

1.服务端认证

测试场景:账号与认证安全
测试项目:服务端认证
测试内容(方法):
1.进入系统登录页面后断开网络,输入账号密码查看不可以登录服务器
2.在断网情况下点击图形/短信验证码,查看验证码不可以更新/获取
测试工具:浏览器

2.双因素认证

测试场景:账号与认证安全
测试项目:双因素认证
测试内容(方法):查看登录认证过程中除了静态口令认证之外还有短信验证码、动态令牌等动态方式结合认证
测试工具:浏览器

3.口令安全策略

测试场景:账号与认证安全
测试项目:口令安全策略
测试内容(方法):
进入系统进行修改密码(新用户设置密码同理)操作,查看系统是否对修改的口令提出要求,并且测试口令策略是否满足如下要求:
a.长度至少8位 b.口令应由数字、字母大小写、字符4类中3类元素组成(四分之三原则);
分别修改不满足上述条件的口令(长度不符、单元素、双元素等以及其组合情况),查看系统是否允许通过修改
测试工具:浏览器
预期结果:
1.对用户进行口令设置的安全要求提示;
2.只能设置符合口令基本强度要求规定的长度以及复杂度的口令
3.当修改的口令不满足要求时无法成功修改密码

4.限制单个账号多重并发会话

测试场景:账号与认证安全
测试项目:限制单个账号多重并发会话
测试内容(方法):
1.使用同一个账号在两个浏览器登录系统,查看是否可以同时登陆系统进行操作
2.如果业务允许单账号重复登录,查看相应登陆日志是否可以明确记录体现差异
测试工具:浏览器
预期结果:
1.无法使用单账号重复登录系统;
2.日志中详细记录了单账号重复登录记录,能够体现区别

5.验证码/令牌安全策略

测试场景:账号与认证安全
测试项目:验证码/令牌安全策略
测试内容(方法):
1.查看验证码长度是否不少于6位
2.查看图形验证码组成是否包含了数字、字母,并且存在横线混淆等防御自动化识别的元素
3.查看短信验证码是否有下发次数限制
4.检查短信验证码是否设置了有效期
测试工具:浏览器
预期结果:
1.验证码长度大于等于6位
2.图形验证码包含了数字、字母,并且存在横线混淆等防御自动化的元素
3.存在一定次数的下发限制
4.设置了不大于60秒的验证码有效期

6.限制登录失败次数

测试场景:账号与认证安全
测试项目:限制登录失败次数
测试内容(方法):
选择一个存在的账号,使用错误的密码进行多次登录认证,查看五次(根据需要可修改次数)输入错误后系统是否提示账号已锁定,是否存在一定的锁定时间,是否限制锁定后解锁次数。
测试工具:浏览器
预期结果:存在错误登录次数限制,并在一定时间后才可再次尝试登陆,且不能无限次尝试,多次锁定后需要彻底锁定,并需要后台验证操作重置后才可重新使用账号。

7.登录认证加密传输

测试场景:账号与认证安全
测试项目:登录认证加密传输
测试内容(方法):
查看登录认证的URL(接口)地址是否为https开头,如https://192.168.1.1:9999/login.jsp(验证数据传输是否使用HTTPS加密传输,且加密协议最好是TLS1.2及其以上版本)
测试工具:浏览器
预期结果:数据传输使用了https加密传输协议,且加密协议是TLS1.2及其以上版本

8.认证错误提示信息模糊化

测试场景:账号与认证安全
测试项目:认证错误提示信息模糊化
测试内容(方法):进入系统登录认证页面,在保证密码错误的情况下使用存在的账号和不存在的账号登录,查看其回显提示内容的模糊情况
测试工具:浏览器
预期结果:除动态口令外,无论是什么样的错误登录,均应该回显提示密码或账户错误,不应该明确指出错误类型。

9.密码加密传输

测试场景:账号与认证安全
测试项目:密码加密传输
测试内容(方法):通过对网站登录页面的请求进行抓包(或F12浏览器调试工具),查看分析数据包中密码参数的值是否加密
测试工具:浏览器调试工具(F12),抓包工具fiddler、Wireshark、BurpSuite等等。
预期结果:密码是经过加密再做传输的(原则上任何能加密传输的数据都要加密传输,具体要依据应用的实际需要而定)

10防御暴力破解

测试场景:账号与认证安全
测试项目:防御暴力破解
测试内容(方法):
通过以下3步验证登录页面是否具备防御暴力破解机制
a.进入系统登录认证页面,查看是否有随机验证码(图形验证码、短信验证码、令牌key)
b.查看随机验证码是否在登录失败后及时更新
c.如果是短信验证码三次输入错误后是否提示重新获取验证码
注:还可结合第6点,登录失败次数限制
测试工具:浏览器
预期结果:
a.发现验证码
b.登录失败后验证码刷新
c.短信验证码三次输入错误后提示重新获取验证码

11.密码找回功能安全要求

测试场景:账号与认证安全
测试项目:密码找回功能安全要求
测试内容(方法):查看系统找回密码功能是否使用短信验证码、邮件验证码/链接的方式进行身份认证(动态认证身份)
测试工具:浏览器
预期结果:密码找回需要动态确认身份。

三、输入\输出验证

1.web端输入数据正确性与安全性校验

测试场景:输入\输出验证
测试项目:web端输入数据正确性与安全性校验
测试内容(方法):
进入系统,找到一处需要输入信息才可进行业务操作的表单进行如下输入测试(如输入密码账号、手机号等):
1.输入不符合该项数据基本规则输入要求的数据(如:手机号输入表单需要满足纯数字、11位),查看其是否可输入或提交进入下一步
2.输入的特别字符、危险字符进行过滤,比如‘<’、‘>’、‘<script>’、‘union’(系统、数据库、代码语言保留字符,特殊意义字符等),查看是否允许被输入,或输入提交后,是否做了转义、编译。
测试工具:浏览器以及浏览器调试工具(F12)/抓包工具
预期结果:
1.不符合基本规则的输入不被允许输入,并给出提示
2.特殊字符不被允许输入并给出提示,或者输入提交后做了转义编译

2.服务端输入数据正确性与安全性校验

测试场景:输入\输出验证
测试项目:服务端输入数据正确性与安全性校验
测试内容(方法):
进入系统,找到一处需要输入信息才可进行业务操作的表单进行如下输入测试(如输入密码账号、手机号等):
1.输入符合该项数据基本规则输入要求的数据发送请求(如:手机号输入表单需要满足纯数字、11位),运用抓包拦截工具(fiddler、Wireshark、BurpSuite等)拦截数据请求,修改数据为不符合符合该项数据基本规则输入要求的数据,放开发送至服务器,查看服务器是否校验数据,能否成功验证并进入下一步
2.输入正确且符合规范的数据发送请求,运用抓包拦截工具(fiddler、Wireshark、BurpSuite等)拦截数据请求,修改数据为特别字符、危险字符进行过滤,比如‘<’、‘>’、‘<script>’、‘union’(系统、数据库、代码语言保留字符,特殊意义字符等), 查看服务器校验处理或进行转义识别。
测试工具:浏览器、抓包工具(fiddler、Wireshark、BurpSuite等)
预期结果:
1.不符合基本规则的输入不被服务器处理,并给出返回提示
2.特殊字符不被服务器处理并给出不包含敏感信息的错误提示或页面,或者服务器进行了转义识别处理。
注:此项主要是验证绕过前端直接验证服务器本身的输入安全,所以重点在于绕过前端,其他内容与第一条类似,绕过前端的方式有很多,这里举例常见方式,甚至如果你对系统熟悉,能获取到(文档或抓包解析等等)相关接口参数,可以像做接口测试一样直接对接口发起请求,进行此项验证。

3.服务端输出安全验证/自定义错误页面

测试场景:输入\输出验证
测试项目:服务端输出安全验证/自定义错误页面
测试内容(方法):
进入系统,在浏览器进行功能操作(需要向服务器发送请求并接受返回的操作),例如登录,进行如下操作:
1.利用抓包工具,抓取服务器返回信息,查看其是否为传输返回
2.输入特别字符、危险字符进行过滤,比如‘<’、‘>’、‘<script>’、‘union’(系统、数据库、代码语言保留字符,特殊意义字符等),查看页面是否返回的错误页面是否包含敏感信息(类似1、2条,关注点不同,在于返回数据)
3.通过手工尝试打开一些不存在的网站路径,或者在url中输入一些敏感的字符,如http://192.168.1.1/login.jspxxx或http://192.168.1.1/—ss!等样式,看其页面是否会抛出异常或者报错,并且查看报错页面中是否包含一些网站架构、调试信息、版本号等敏感信息
测试工具:浏览器、抓包工具(fiddler、Wireshark、BurpSuite等)
预期结果:
1.服务器返回数据通过加密传输
2.服务器返回了不包含敏感信息的错误页面或服务端在返回信息中过滤或者转义了测试输入的恶意字符符号
3.所有错误页面中均没有包含敏感信息或自定义了错误页面,屏蔽了所有错误信息

4.频繁输入限制

测试场景:输入\输出验证
测试项目:频繁输入限制
测试内容(方法):进入系统,找到类似“缴费明细”、“通话详单”、“商品搜索”等重要或者敏感业务的查询按钮,尝试一直重复点击查询,观察系统反馈情况(短时间频繁操作限制)
测试工具:浏览器
预期结果:多次点击查询后系统对查询进行限制,短时间内无法继续查询

四、授权管理

1.角色权限划分

测试场景:授权管理
测试项目:角色权限划分
测试内容(方法):进入系统用户管理页面,查看是否有角色、用户组、用户、具体权限功能点等细粒度权限划分功能
测试工具:浏览器
预期结果:系统功能权限颗粒度划分细致,用户、组、角色有定义且关联关系单一明确

2.关键操作二次认证

测试场景:授权管理
测试项目:关键操作二次认证
测试内容(方法):进入系统,选择修改密码或者交易支付等重要操作功能点,进行相应操作查看是否需要输入原密码/输入交易密码等二次校验的操作
测试工具:浏览器
预期结果:关键操作均需要存在二次认证确认机制,且两次认证参数不可重复一致

3.数据库账号/应用启动账号权限

测试场景:授权管理
测试项目:数据库账号/应用启动账号权限
测试内容(方法):
1.登录数据库服务器,查看数据库运行账号是否是普通权限账号
2.登录应用服务器,查看应用运行账号是否是普通权限账号
测试工具:
预期结果:数据库与应用服务器运行账号均需为普权限账号,最小权限允许程序系统

4.开发端口最小化

测试场景:授权管理
测试项目:开发端口最小化
测试内容(方法):
1.登录应用服务器,查看程序运行下的服务器开放端口(查看方式很多如命令行查看:netstat -aptn,查看所有开启的端口号;也可用扫描工具:如Nmap等),检查是否存在非程序运行必要端口开放,API中使用的敏感端口是否有做调用身份校验
测试工具:命令行或扫描工具等
预期结果:非程序运行必要端口不可开发,API中使用的敏感端口已做调用身份校验2

5.越权访问

测试场景:授权管理
测试项目:越权访问
测试内容(方法):
以超管 admin(高权限用户) 身份登录系统,找到一个只有超管(高权限)才有的功能的链接,
比如说:“http://localhost/mywebappname/userManage/userList.do” , 可以显示出所有的user,并复制此链接,以普通用户登陆进系统,在地址栏输入: http://…/userManage/userList.do ,如果可以查看到其所有的user,则就造成了普通用户的越权访问
测试工具:浏览器
预期结果:低权限账户,无法使用高权限功能(账户无法使用自己权限功能以外的功能,或查看数据)
注:越权的操作方式方法,场景很多(如利用cookie值赋权等等),这里举例常见简单的方式及验证

6.未授权访问

测试场景:授权管理
测试项目:未授权访问
测试内容(方法):
通过对登录后的页面进行抓包,将抓取到的功能链接,在其他浏览器(未登录情况下)打开直接访问,如果未跳转到登录页面直接进入功能页面,则可判断为存在未授权访问漏洞
测试工具:浏览器,抓包工具
预期结果:无法在未登录情况下直接通过链接访问功能页面
注:未授权访问操作方式方法,场景同样比较多(如利用cookie值越过登录),这里举例常见简单的方式及验证

五、数据保护

1.服务端验证数据完整性

测试场景:数据保护
测试项目:服务端验证数据完整性
测试内容(方法):使用抓包工具,拦截前端提交参数,修改参数(如手机号、交易金额、交易数量、订单编号、商品编号等敏感数据),查看服务器返回信息,是否可以进入到下一步操作
测试工具:抓包工具(fiddler、Wireshark、BurpSuite等)
预期结果:服务器返回错误信息,无法进入交易的下一步操作,服务端对前端传来的参数做了完整性校验防止数据在传输中被篡改

2.硬编码检测

测试场景:数据保护
测试项目:硬编码检测
测试内容(方法):打开系统网站,查看网页源代码,网页html中是否把用户、密码、数据库接口认证信息等敏感信息直接写到源代码或注释中
测试工具:浏览器
预期结果:网页源代码、html中未包含敏感信息

3.数据安全存储检测

测试场景:数据保护
测试项目:数据安全存储检测
测试内容(方法):
进入后端数据库服务器,打开数据库,查看如下信息:
1.存储在数据库中的诸如身份证号、银行卡号、金额、密码等重要且敏感的信息字段是否进行了加密
2.存储了应用程序所有数据的数据库db文件是否经过了加密
测试工具:数据库管理工具
预期结果:敏感信息与数据库db文件均已加密保存

4.表单提交get方法检测

测试场景:数据保护
测试项目:表单提交get方法检测
测试内容(方法):浏览器调试模式下(F12),进入数据提交类功能页面,提交数据,在调试页面中查看请求包是get请求包还是post请求包
测试工具:浏览器调试工具
预期结果:所有表单,参数提交类请求都应该是post请求而不是get请求

5.数据传输加密/敏感数据展示脱敏

测试场景:数据保护
测试项目:数据传输加密/敏感数据展示脱敏
测试内容(方法):
使用抓包工具代理浏览器抓包,查看如下信息:
1.应用程序在把前端重要信息传输到服务端时是否对例如身份证号、金额、银行卡号等重要且敏感的字段进行加密;
2对于服务端返回的例如身份证号、银行卡号、家庭住址等敏感信息是否对其进行脱敏(加*)处理后再进行传输和前端展示
测试工具:抓包工具(fiddler、Wireshark、BurpSuite等)
预期结果:数据传输均应该采用https协议加密传输,数据均应该做加密处理,展示的敏感字段均应该脱敏处理
注:数据加密,数据传输安全应该贯穿整个系统,而不是单独某个功能,这里就不做加密相关的详细说明了。

六、会话管理

1.cookie安全属性

测试场景:会话管理
测试项目:cookie安全属性
测试内容(方法):
使用浏览器插件,浏览器调试工具,抓包工具等查看应用程序cookie字段中是否存在secure(限制cookie发送协议为https)和HttpOnly(限制cookie被js获取)两个字段,是否满足长度足够(建议大于128位),且字符数字随机生成
测试工具:浏览器调试工具,浏览器插件(如火狐的Cookie Quick Manager),抓包工具等
预期结果:cookie字段中有secure和HttpOnly字段,且字段足够长,随机

2.限制会话限制时间与生命周期

测试场景:会话管理
测试项目:限制会话限制时间与生命周期
测试内容(方法):
1.登录系统后,不进行任何操作等待一定时间后(按实际需要设定)再次操作系统,查看系统是否要求重新进行登录认证
2.查看应用程序源代码中是否有对Session/cookie最大生命周期进行限制的代码逻辑
测试工具:浏览器,源代码查看工具
预期结果:
1.认证使用后一定时间闲置之后需要重新认证
2.源代码中有对用户id最大生命周期的限制逻辑

3.用户id认证后变更机制

测试场景:会话管理
测试项目:用户id认证后更新机制
测试内容(方法):使用浏览器插件查看系统登陆后的cookie值和登陆前的cookie值是否有变化
测试工具:浏览器调试工具,浏览器插件(如火狐的Cookie Quick Manager),抓包工具等
预期结果:身份认证成功后cookie值变更新的值

4.主动注销认证

测试场景:会话管理
测试项目:主动注销认证
测试内容(方法):使用浏览器登陆系统,检查是否有登陆注销功能,且能使用
测试工具:浏览器
预期结果:有注销功能,且注销正常

七、日志管理

1.日志审计内容要求

测试场景:日志管理
测试项目:日志审计内容要求
测试内容(方法):查看日志记录的内容中是否至少包含了事件日期、时间、发起者信息、类型、描述和结果等信息
测试工具://
预期结果:日志内容完整,至少包含了事件日期、时间、发起者信息、类型、描述和结果等:

2.日志禁止记录明文信息

测试场景:日志管理
测试项目:日志禁止记录明文信息
测试内容(方法):查看应用日志中是否包含了登录时输入的账号密码等敏感信息
测试工具://
预期结果:应用日志中未包含敏感信息,或加密敏感信息

3.日志访问策略

测试场景:日志管理
测试项目:日志访问策略
测试内容(方法):使用不同权限账号登录系统,检查日志查看是否有权限控制
测试工具://
预期结果:日志查看有权限控制

4.日志存储期限要求

测试场景:日志管理
测试项目:日志存储期限要求
测试内容(方法):查看日志保存的时间期限(时间周期根据业务需求而定,检查符合最低要求,建议3个月及以上)
测试工具://
预期结果:日志保存期限符合标准

八、异常管理

1.异常安全处理

测试场景:异常管理
测试项目:异常安全处理
测试内容(方法):查看应用程序源代码,是否存在对异常进行安全处理的逻辑代码存在(安全异常捕获并处理)
测试工具:源代码查看工具
预期结果:有代码处理逻辑

2.异常信息记录

测试场景:异常管理
测试项目:异常信息记录
测试内容(方法):人为造成应用程序异常,查看日志信息中是否记录异常的发生时间、异常详情等信息
测试工具://
预期结果:有日志记录,且日志记录信息完整

九、文件上传与下载

1.任意文件上传

测试场景:文件上传与下载
测试项目:任意文件上传
测试内容(方法):查看应用程序源代码中是否有对上传的文件类型、文件大小、文件内容进行校验的代码(也可直接制造不同文件上传)
测试工具:源代码查看工具
预期结果:上传文件有大小、类型、用户身份权限等的验证逻辑

2.任意文件下载

测试场景:文件上传与下载
测试项目:任意文件下载
测试内容(方法):查看应用程序源代码中是否有对下载文件的用户权限进行校验的代码(也可直接尝试下载不同文件)
测试工具:源代码查看工具
预期结果:下载文件时有对下载用户的身份信息做验证

3.任意文件存储

测试场景:文件上传与下载
测试项目:任意文件存储
测试内容(方法):
1.查看服务器文件存储的目录是否具备可执行权限(也可直接执行文件)
2.查看应用程序源代码中是否有对文件存储的用户权限进行校验的代码
测试工具://
预期结果:
1.存储目录下的文件不可直接执行,无执行权限
2.存储文件(上传存储文件)需要验证用户信息身份

总结

不难看出,基础的web安全验证,几乎没有技术要求,大多只需要浏览器点点点即可完成,最多也就是对一些常见工具的简单使用,这里更多的是验证安全规范意识,而安全渗透则是在这些基础上加入技术手段,用以验证安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值