内部测试培训
<hr />
<h3>常见测试工具</h3>
<blockquote>
<p>部分CDN图片无法正常显示,语雀源文档链接:<a href="https://www.yuque.com/immochan/sseyzp/hriq9d">https://www.yuque.com/immochan/sseyzp/hriq9d</a></p>
</blockquote>
<h4>Postman/Jmeter/APIfox</h4>
<ol>
<li>Postman和jmeter是知名度比较广的程序接口测试工具,想了解工具发展历史的可以自行百度了解学习。</li>
</ol>
<ul>
<li>Postman支持请求URL中直接填写整体链接,Jmeter需要添加不同的协议、主机、端口、路径才能实现一个链接的正常访问和请求</li>
<li>Postman比较适合做手工接口测试,因为简单,可以实现半自动化,Jmeter比较适合自动化接口测试,因为功能强大并且可以保存脚本,批量执行设置很容易</li>
</ul>
<p>因为两种测试工具针对的范围面不同,我测试中主要使用Jmeter进行接口的测试,懒得在两个工具中进行切换,开发人员个人认为更适合使用postman对接口进行调试。以下是部分功能对比图。</p>
<p><strong>同一登录接口,Postman请求方式</strong><br />
<img src="https://raw.githubusercontent.com/immochan/img/main/image-20220701143625095.png" alt="" /><strong>Jmeter请求方式</strong><br />
<img src="https://raw.githubusercontent.com/immochan/img/main/image-20220701160301360.png" alt="" /></p>
<ol>
<li>APIfox 是最近几年国内公司开发的接口测试集成工具,界面上更偏向于Postman,但是相较于Postman,APIfox在功能上更加丰富,在常见的接口测试基础上,apifox还支持生成规范化的接口文档。
<img src="http://cdn.ubug.top/image-20220703113144400.png" alt="" /></li>
</ol>
<p>分享链接: <a href="https://www.apifox.cn/apidoc/shared-f6eb6831-672c-4687-b3e9-42a6c39fb5e4">https://www.apifox.cn/apidoc/shared-f6eb6831-672c-4687-b3e9-42a6c39fb5e4</a> 访问密码 : jbiymL5B</p>
<h4>Fiddler/Charles/Wireshark/HttpCanary</h4>
<p>抓包工具根据工作方式的区别,主要分为两类</p>
<p>1、一种是通过设置代理去捕获http包,比如Fiddler、Charles</p>
<p>2、还有一种是监测网卡,直接捕获所有经过网卡的协议包,比如Wireshark</p>
<p>以下是部分工具介绍。</p>
<ul>
<li><strong>Fiddler</strong>:目前主流的HTTP/HTTPS协议抓包工具,它支持大部分的主流Web网站抓包,界面操作支持断点调试,接口回归。<br />
<img src="http://cdn.ubug.top/image-20220704111745690.png" alt="" /></li>
<li><strong>Charles</strong>:和Fiddler类似,都是通过设置代理,获取网络请求并分析,配置好证书后,可以抓取https的请求数据。它的特点是可以设置网络限速(Throttle),在复现一些延迟比较敏感的接口时更加方便,同时Charles的External Proxy功能,可以把Charles经过的请求转到其他代理服务器,这个在小部分开发场景会用到。<br />
<img src="http://cdn.ubug.top/image-20220704113121627.png" alt="" /></li>
<li><strong>Wireshark</strong>:它的功能比fiddler更强大,能抓取到的协议类型更多,但是Wireshark是通过捕获网卡去进行接口检测,在https的请求抓包方面,它无法解析加密之后的https请求详细内容,更适用于TCP UDP抓包测试,不适用于web程序中的HTTP请求。<br />
并且由于单次捕获的数据类型很多,使用者想要获取特定的数据需要自行编辑过滤规则,不太友好。</li>
<li><strong>HttpCanary</strong>:又称小黄鸟,是移动端平台的抓包软件,工作原理同Fiddler,设置代理,安装证书之后,可以捕获到手机上的一些网络请求,但是此软件在高版本的安卓系统上,表现不稳定,需要Root或者无法正确识别证书,意义不大,不推荐。</li>
</ul>
<h3>兼容性测试/网站性能加载测试</h3>
<h5>1、兼容性测试(<a href="http://testsize.com/">http://testsize.com/</a>)</h5>
<p>打开网站,可以设置各种不同的分辨率,输入目标网址进行访问,可以查看该网址在不同分辨率下的表现情况,并且正常操作也可以检查网站前端控件在不同分辨率设备下的兼容情况。</p>
<p><img src="http://cdn.ubug.top/image-20220723114419259.png" alt="" /></p>
<h5>2、网站性能加载测试(<a href="https://pagespeed.web.dev/">https://pagespeed.web.dev/</a>)</h5>
<p>打开网站(需要使用代理),输入目标网址之后,网站会运行检测,针对目前网站的移动端和桌面端进分析,并快速返回网站加载性能和影响因素,并且在现有的结果上提供可处理的优化方案。</p>
<p><img src="http://cdn.ubug.top/image-20220723165836438.png" alt="" /></p>
<p>检测结果和各速度参数</p>
<p><img src="http://cdn.ubug.top/image-20220723170148740.png" alt="" /></p>
<p>可优化的加载组件和建议处理方案</p>
<h3>代购系统商品问题排查方法(示例)</h3>
<p>示例:<a href="https://e-market.dev.1buyo.com/index/item/index.html?tp=taobao&tid=591961230217&sales=10000">https://e-market.dev.1buyo.com/index/item/index.html?tp=taobao&tid=591961230217&sales=10000</a></p>
<p>这个链接是在系统中商品的展现形式,如果需要定位问题出自于哪里,那我们可以有四种方法进行排查。</p>
<h4>1、F12打开控制台查看Getitem接口获取的数据,这里的数据是通过我们内部程序处理之后返回的。</h4>
<p><img src="http://cdn.ubug.top/image-20220723212435922.png" alt="" /></p>
<h4>2、在主域名+"/api/obapi/getapilog",访问API日志界面,查看对应时间的商品请求结果和响应。</h4>
<p><img src="http://cdn.ubug.top/image-20220723212522421.png" alt="" /></p>
<h4>3、拿到商品id[591961230217],去API测试站(<a href="https://open.onebound.cn/test/?)使用对应商品请求API接口,返回信息和代购系统返回信息对比,如果接口处返回无异常,在系统端清空API缓存后重试。注:为完全复现问题,要使用对应系统的apikey和密钥。每个key的权限和保障渠道是不一样的">https://open.onebound.cn/test/?)使用对应商品请求API接口,返回信息和代购系统返回信息对比,如果接口处返回无异常,在系统端清空API缓存后重试。注:为完全复现问题,要使用对应系统的apikey和密钥。每个key的权限和保障渠道是不一样的</a>。</h4>
<p><img src="http://cdn.ubug.top/image-20220723212628041.png" alt="" /></p>
<h4>4、系统端,使用本次Getitem请求的URL和传参,后面加上"debug=2"参数,进入到调试界面,从调试界面获取到本次请求使用的api源接口参数,再去获取信息,这样可以直接知道本次请求,从API那边返回的原参数是什么,从而定位问题。</h4>
<ol>
<li>如果出现的界面如下,没有额外信息,那就是有缓存,可以去后台清除一遍api缓存之后重试。<br />
<img src="http://cdn.ubug.top/image-20220723213132747.png" alt="" /></li>
<li>正常出现界面如下<br />
<img src="http://cdn.ubug.top/image-20220723213305973.png" alt="" /><br />
通过方框中的数据,我们可以看到本次请求系统这边传过去的语言、关键词、排序等参数,这两个连接组装起来请求就会返回api的结果。</li>
</ol>
<h3>Fiddler移动端抓包分析</h3>
<p>适用场景:移动端网页、APP应用等无法直接通过浏览器/开发工具快速获取请求信息的情况</p>
<ol>
<li>首先Fiddler配置好证书支持获取Https协议链接,浏览器要导入Fiddler的证书。<br />
<img src="http://cdn.ubug.top/image-20220723220413067.png" alt="" /></li>
<li>确保Fiddler和测试手机在同一局域网,即两者的外部ip一致,并且可以内网Ping通<br />
<img src="http://cdn.ubug.top/image-20220723223508280.png" alt="" /></li>
<li>手机上链接的wifi代理方式改为手动,地址填写为电脑的内网地址192.168.<em>.</em>,然后端口默认填写8888 <img src="http://cdn.ubug.top/image-20220723223656527.png" alt="" /></li>
<li>手机端浏览器访问 IP:8888安装证书,成功之后,在手机端访问APP执行操作,电脑端的Fiddler就可以看到请求了<br />
<img src="http://cdn.ubug.top/image-20220723224320856.png" alt="" /></li>
</ol>
<h3>安全测试</h3>
<h4>常用安全测试方法:漏洞扫描或者代码审查</h4>
<ol>
<li>使用工具 Acunetix,输入目标站点URL后,Acunetix会对该站点进行覆盖式基本漏洞扫描,包括但不限于跨站注入脚本、SQL注入漏洞、弱密码、高风险漏洞,或者恶意软件等。</li>
<li>测试使用Acunetix对V2022版本代码进行初步扫描,结果如下<br />
<img src="http://cdn.ubug.top/image-20220729092730515.png" alt="" /></li>
<li>如步骤2图示,我们可以根据软件返回的测试结果,针对性处理/优化已知漏洞<br />
例如cookies中的货币参数,存在跨站攻击的可能,测试结果中会详细描述本次漏洞发现的步骤,以及测试的传参<br />
<img src="http://cdn.ubug.top/image-20220729093539096.png" alt="" /></li>
<li>除以上跨站脚本外,还有目录扫描到的敏感文件,以及未做保护的表单程序等<br />
<img src="http://cdn.ubug.top/image-20220729094310833.png" alt="" /></li>
</ol>
<h4>以上是软件安全测评部分,除软件扫描外,安全测试还包括以下部分:</h4>
<h5>明文传输:系统接口传输中的敏感内容不做加密,直接在接口中体现出来</h5>
<ol>
<li><strong>系统敏感信息:</strong>登录密码、支付金额、注册的手机号码、身份证、邮箱等信息</li>
<li><strong>系统传输敏感信息场景:</strong>登录、注册、支付、修改密码</li>
</ol>
<h5>越权访问:就是测试能否通过URL地址获取管理员及其他用户信息</h5>
<ol>
<li>出现admin、user、system、pwd等敏感目录的URL地址,例如v2022.1buyo.com/admin</li>
<li><strong>垂直越权场景</strong>:当系统存在多个不同权限的管理员时,低权限的管理员不能访问或操作到高权限的管理的资源,例如系统中,子管理员可以直接操作超级管理员的权限功能,这也可以视为安全漏洞。</li>
<li><strong>水平越权场景:</strong>当系统存在多个需要登录用户,A用户不能访问B用户的资源,例如在系统中,A用户的充值/消费记录出现在B用户的信息中,或者A客户可以使用B客户的账户余额,这也可以视为安全漏洞</li>
</ol>
<h5>文件上传:测试能否上传木马、病毒、色情图片等恶意图片,或者可执行程序</h5>
<ol>
<li>现在的很多接口上传都做了文件类型限制,但是我们依旧可以通过修改可执行文件的后缀去实现这个效果</li>
<li>例如图片上传接口传一个test.html,事先文件类型改为.png,在传入接口的时候抓包修改为.html,修改成功后访问该html文件,如果可以正常访问,则有错,这个可以通过修改上传文件夹的权限来避免这个问题。</li>
</ol>
<h5>越权文件下载,测试URL中是否包含文件名或文件目录,尝试提交参数值查看是否可下载或读取其他目录的文件内容</h5>
<ol>
<li><strong>文件下载场景:</strong>文件下载、文件读取功能</li>
<li><strong>测试url:</strong>包含文件名或文件目录的url,修改下载路径,通过../对路径进行跳转尝试下载其他目录下的文件,例如http://www.example.com/donwload.jsp?filename=../../WEB-INF/web.xml,如果可以正常下载到其他目录的文件,则有bug</li>
</ol>
<h5>短信/邮箱验证:测试短信、邮箱验证方式是否进行安全设置</h5>
<p>例如发送验证码未做限制,点击发送验证码可以通过数据包查看到本次发送的验证码,这样就存在验证漏洞,或者未做限制的验证码发送接口,会导致网站邮件量被刷,造成经济损失。</p>
<h5>鉴权缺失:测试需要登录、鉴权才可操作的系统中可修改资源的相关接口,鉴权是否可靠。</h5>
<p>定义:如果接口中参数都是完全可以被预期的话。即除了鉴权的cookie 外,header中和body表单中的所有参数都可以被事先知道。那么表明存在漏洞。报BUG,如果header或者body中有随机的token或者需要验证码之类的,则不存在漏洞。</p>
<h5>密码健壮性:测试密码、验证码验证的方式是否可靠,是否可以被暴力猜测直至命中</h5>
<table id="c8129a73" class="ne-table" style="table-layout: fixed; border-collapse: collapse; border: 1px solid #d9d9d9; width: 750px"><tbody><tr style="height: 33px"><td width="375" style="border: 1px solid #d9d9d9"><p id="u8b661e71" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: left"><span class="ne-text">步骤</span></p></td><td width="375" style="border: 1px solid #d9d9d9"><p id="u6cb72d68" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: center"><span class="ne-text">结果</span></p></td></tr><tr style="height: 33px"><td width="375" style="border: 1px solid #d9d9d9"><p id="ue4f2c2b4" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: left"><span class="ne-text">操作输入密码、验证码的场景,使用抓包工具,修改接口中的密码、验证码,多次尝试输入错误的验证码</span></p></td><td width="375" style="border: 1px solid #d9d9d9"><p id="u64cec484" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: center"><span class="ne-text">可以被暴力猜测直至命中,则存在漏洞</span></p></td></tr><tr style="height: 33px"><td width="375" style="border: 1px solid #d9d9d9"><p id="u36d152af" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: left"><span class="ne-text">使用工具重复请求接口(类似登录接口)多次(密码错误、验证码错误情况下、100次以上)</span></p></td><td width="375" style="border: 1px solid #d9d9d9"><p id="uaa18c06b" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: center"><span class="ne-text">如果有命中的,或者针对同IP/设备短时间密集并发没有限制,那么存在接口被爆破的可能</span></p></td></tr><tr style="height: 33px"><td width="375" style="border: 1px solid #d9d9d9"><p id="u7e182c1e" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: left"><span class="ne-text">检查密码设置、验证码生成的业务逻辑设计</span></p></td><td width="375" style="border: 1px solid #d9d9d9"><p id="u75027bee" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: center"><span class="ne-text">1、若设置密码时就未考虑密码复杂程度,允许用户设置弱密码,(如设置账号必须满足数字+字母+特殊字符,8位以上。规避123456、aaaaaaa、qwerty等弱密码),用户账号安全可能存在漏洞。2、若验证码生成逻辑简单,或者结果集合小,或为简单的图片验证,则可能存在漏洞,尽量使用更安全的验证设计(如行为验证 )</span></p></td></tr><tr style="height: 33px"><td width="375" style="border: 1px solid #d9d9d9"><p id="u25ff9d85" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: left"><span class="ne-text">对密码找回及修改密码功能,检查密码是否有权限管控,只能修改或设置自己的密码,规避通过该功能修改别人的密码</span></p></td><td width="375" style="border: 1px solid #d9d9d9"><p id="u1f29939b" class="ne-p" style="margin: 0; padding: 0; min-height: 24px; text-align: center"><span class="ne-text">若可通过密码找回、修改密码、账号申诉等功能,修改其他人的账号密码,则存在漏洞,报BUG</span></p></td></tr></tbody></table>
<h5>数据安全:检查系统中敏感数据的存储是否安全</h5>
<ol>
<li>例如密码、身份证、家庭住址、银行卡号、手机号、真实姓名,这些信息在数据表中是否有加密存储,防止脱库后信息泄露。</li>
<li>检查敏感数据在操作界面展示上是否脱敏 如:密码显示隐藏选项,手机号、身份证仅显示首尾等1344250,220**2129。</li>
<li>检查数字设置安全,是否限制输入负数或超大数额</li>
</ol>
<h3>开发中测试注意事项</h3>
<ol>
<li>需求有疑问及时终止开发,内部沟通</li>
<li>接口和界面字段保持多语言,预留多语言字段配置,养成开发之后完善中英文语言包的好习惯</li>
<li>在项目处理中,需要有意识的维护主版本的迭代,新问题的处理需要同步</li>
<li>自测/自我检查习惯</li>
</ol>