性能测试:
- 你常用的性能测试工具有哪些
答: 以下大致介绍,说常会的就行了。 (1)kylinTOP测试与监控平台(商用版) kylinTOP测试与监控平台是一款B/S架构的跨平台的集性能测试、自动化测试、业务监控于一体的测试平台,它是深圳是奇林软件有限公司旗下的一款产品,该工具开放10个免费虚拟用户可供学习和使用。在易用性上较好,录制脚本支持最新版本的浏览器,对谷歌和火狐都支持非常好。对一些https.的网站证书问题,都为用户自动处理好了,可以轻松录制。录制过程高效便捷这是其它性能工具无法比拟的。仿真能力上是目前业界做的最好的性能工具,可以做到完全仿真浏览器行为,也就是单用户的HTTP请求瀑布图可以和浏览器器完全一样。总之它是目前国内一款非常难得好用的性能测试工具,可以完全替代国外的同类产品。目前在军工领域、测评检测机构、国有企业、银行体系、大型企业有着广泛的应用。支持的协议较多,尤其在视频领域支持的协议非常多,具有独特的优势。 官网地址:http://www.70testing.com (2)LoadRunner(商用版) 是一款C/S架构的商业版性能测试工具,在国内存在的时间较早,在国内在使用较广泛,知名度较高。该工具免费开放了50个虚拟用户,可供学习和使用。在国内的网站上有破解版本,但是到了最新的12版本,不再有破解版。破解版的仿真度较差,HTTP的瀑布图是按两个两个并发(与浏览器行为不一样),最新版本的仿真相对提高很多,对于HTTP静态请求相似度请求提高到80%,而动态请求就要差很多。由于loadRunner起步早,支持的协议很多,很多不常用的协议都支持,如电子邮件相关协议都支持。但对一些视频协议支持的不太好。loadrunner目前对浏览器最新版支持的不太好,最新的loadrunner12只支持ie11,对其它浏览器如谷歌、火狐等支持的较差。在脚本录制方面有些网站录制不了。价格上比较昂贵,一般小企业无力承担。 LoadRunner官网:https://saas.hpe.com/zh-cn/software/loadrunner (3)Apache JMeter(开源免费) JMeter是一款开源免费的压测产品,最初被设计用于Web应用功能测试使用,如今JMeter被国内企业用于性能测试。对于WEB服务器(支持浏览器访问),不建议使用Jmeter,因为jmeter的线程组都是线性执行的,与浏览器相差很大,测试结果不具有参考性。对于纯接口的部分场景(对接口调用顺序无严格要求)测试可以使用,但是要注意使用技巧,才能达到理想结果。 官网链接:http://jmeter.apache.org/ (4)NeoLoad(商用版) NeoLoad是Neotys出品的一种负载和性能测试工具,可真实地模拟用户活动并监视基础架构运行状态,从而消除所有Web和移动应用程序中的瓶颈。NeoLoad通过使用无脚本GUI和一系列自动化功能,可让测试设计速度提高5-10倍,并将维护的脚本维持在原始设计时间的10%,同时帮助用户使用持续集成系统自动进行测试。 NeoLoad支持WebSocket、HTTP1/ 2、GWT、HTML5、AngularJS、Oracle Forms等技术协议,能够监控包括操作系统,应用服务器,Web服务器,数据库和网络设备在内的各种IT基础设施,同时可以通过Neotys云平台发起外部压力。 官网链接:http://www.neotys.com/product/overview-neoload.html (5)WebLOAD(商用版) WebLOAD是来自Radview公司的负载测试工具,它可被用以测试系统性能和弹性,也可被用于正确性验证(验证返回结果的正确性)。其测试脚本是用Javascript(和集成的COM/Java对象)编写的,并支持多种协议,如Web(包括AJAX在内的REST/HTTP)、SOAP/XML及其他可从脚本调用的协议如FTP、SMTP等,因而可从所有层面对应用程序进行测试。 WebLOAD存在免费和专业两个版本,免费版本支持50个虚拟用户,专业版还提供更多的报告和协议供用户选择。WebLOAD通常用作QA团队的独立运行工具,在开发周期的验证阶段,被测系统(System Under Test,SUT)投入实用之前,在模拟环境中对被测系统进行测试。 官网链接:http://www.radview.com/ (6)Loadster(商用版本) 是一款商用负载测试软件,用于测试高负载下网站、Web应用、Web服务的性能表现,支持Linux,Mac和Windows等运行环境。 Loadster能够对Web应用/服务的Cookies、线程、头文件、动态表格等元素发起测试,获得Web在压力下的性能、弹性、稳定性和可扩展性等方面的表现。 官网链接:http://www.loadsterperformance.com/ (7)Loadstorm(商用版本) Loadstorm是一款针对Web应用的云端负载测试工具,通过模拟海量点击来测试Web应用在大负载下的性能表现。由于采用了云资源,所以Loadstorm的测试成本非常低,用户可以在云端选择创建自己的测试计划,测试标准和测试场景。 Loadstorm最多可以生成多达50000个并发用户,通过数以千计的云服务器发起访问。使用Loadstorm不需要任何脚本知识,同时提供多样化的测试图表和报告模版,用于准确测量Web应用的各项性能指标,如错误率,平均响应时间和用户数量等。Loadstorm可以申请免费试用,但更多压力和功能需要开通高级帐户。 官网链接:http://loadstorm.com/ (8)Load impact(免费使用) 是一个在线可以免费测试网站负载能力,它就可以满足你的基本要求, 当然成为他的付费用户测试的项目将会更多。 Load impact是一款服务于DevOps的性能测试工具,支持各种平台的网站、Web应用、移动应用和API测试。Loadimpact可以帮助用户了解应用的最高在线用户访问量,通过模拟测试不同在线人数下网站的响应时间,估算出服务器的最大负载。 Load impact的使用非常简单,只需要输入网址进行测试,便可统计出加载网站的一些详细数据。包括整体加载和站内图片,javascript, CSS等代码载入。可以在右侧列表选择不同文件来同时对比最多三个对象的加载数据,并生成图表显示,方便网站设计者来分析。测试完成之后,网站还可以存储测试过的统计数据。 官网链接:http://loadimpact.com/ 特别提醒: a.由于此测试数据发生在国外,一般反映出的是国外用户访问您要测试的网站的速度参数,具有一定的参考性; b.对于国内主机,并且主要客户来自于国内的用户来说请慎重将此数据作为依据。 (9)locust(开源免费) Locust 完全基本 Python 编程语言,采用 Pure Python 描述测试脚本,并且 HTTP 请求完全基于 Requests 库。除了 HTTP/HTTPS 协议,Locust 也可以测试其它协议的系统,只需要采用Python调用对应的库进行请求描述即可。但是需要手工编写脚本,有一定的难度 (10)OpenSTA(开源免费) OpenSTA是一个免费的、开放源代码的web性能测试工具,能录制功能非常强大的脚本过程,执行性能测试。例如虚拟多个不同的用户同时登陆被测试网站。其还能对录制的测试脚本进行,按指定的语法进行编辑。在录制完测试脚本后,可以对测试脚本进行编辑,以便进行特定的性能指标分析。其较为丰富的图形化测试结果大大提高了测试报告的可阅读性。OpenSTA 基于CORBA 的结构体系,它通过虚拟一个proxy,使用其专用的脚本控制语言,记录通过proxy 的一切HTTP/S traffic。通过分析OpenSTA的性能指标收集器收集的各项性能指标,以及HTTP 数据,对系统的性能进行分析。 官网地址:http://opensta.org/ (11)阿里云性能PTS 性能测试服务(Performance Testing Service,简称 PTS)是卓越的SaaS性能测试平台,具备强大的分布式压测能力,可模拟海量用户的真实业务场景。基于服务器压测的平台。当然还有其他的服务器压测平台,都很简单。
- 当时间不够你搭建性能测试环境的时候,你会采取什么方法能够迅速性能测试
答: 使用云服务器压测平台,比如阿里云性能PTS
- 什么是负载测试?什么是性能测试
答: 性能测试(或称多用户并发性能测试)、负载测试、强度测试、容量测试是性能测试领域里的几个方面,但是概念很容易混淆。下面将几个概念进行介绍。性能测试(Performance Test):通常收集所有和测试有关的所有性能,通常被不同人在不同场合下进行使用。 关注点:how much 和 how fast 负载测试(Load Test):负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。 关注点:how much 强度测试(Stress Test): 强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况,目的是找到系统在哪里失效以及如何失效的地方。包括 Spike testing:短时间的极端负载测试 Extreme testing:在过量用户下的负载测试 Hammer testing:连续执行所有能做的操作 很多人容易混淆概念,下面举个跑步的例子进行解释。 性能测试,表示在一个给定的基准下,能执行的最好情况。例如,在没有负重的情况下,你跑100米需要花多少时间(这边,没有负重是基准)? 负载测试,也是性能测试,但是他是在不同的负载下的。对于刚才那个例子,如果扩展为:在50公斤、100公斤……等情况下,你跑100米需要花多少时间? 强度测试,是在强度情况下的性能测试。对于刚才那个例子,如果改为:在一阵强风的情况下,你在负重或没有负重的情况下,跑100米需要花多少时间?
- 性能测试包含了哪些
答: 性能测试类型包括负载测试,强度测试,容量测试。 负载测试- 核实在bai保持配置不变的情况下,测试对象在不同操作条件(如不同用户数、事务数等)下性能行为的可接受性。 强度测试- 核实测试对象性能行为在异常或极端条件(如资源减少或用户数过多)之下的可接受性。 容量测试- 核实测试用户同时使用软件程序的最大数量。
- 简述一下性能测试的常用步骤
答: 以下为完整流程,仅供参考。
(1)、准备工作 a.系统基础功能验证 性能测试在什么阶段适合实施?切入点很重要!一般而言,只有在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行性能测试,否则性能测试是无意义的。 b.测试团队组建 根据该项目的具体情况,组建一个几人的性能测试team,其中DBA是必不可少的,然后需要一至几名系统开发人员(对应前端、后台等),还有性能测试设计和分析人员、脚本开发 和执行人员;在正式开始工作之前,应该对脚本开发和执行人员进行一些培训,或者应该由具有相关经验的人员担任。 c.工具的选择 综合系统设计、工具成本、测试团队的技能来考虑,选择合适的测试工具,最起码应该满足一下几点: ①支持对web(这里以web系统为例)系统的性能测试,支持http和https协议; ②工具运行在Windows平台上; ③支持对webserver、前端、数据库的性能计数器进行监控; d.预先的业务场景分析 为了对系统性能建立直观上的认识和分析,应对系统较重要和常用的业务场景模块进行分析,针对性的进行分析,以对接下来的测试计划设计进行准备。 (2)测试计划 测试计划阶段最重要的是分析用户场景,确定系统性能目标。 a.性能测试领域分析 根据对项目背景,业务的了解,确定本次性能测试要解决的问题点;是测试系统能否满足实际运行时的需要,还是目前的系统在哪些方面制约系统性能的表现,或者,哪些系统因素导致 系统无法跟上业务发展?确定测试领域,然后具体问题具体分析。 b.用户场景剖析和业务建模 根据对系统业务、用户活跃时间、访问频率、场景交互等各方面的分析,整理一个业务场景表,当然其中最好对用户操作场景、步骤进行详细的描述,为测试脚本开发提供依据。 c.确定性能目标 前面已经确定了本次性能测试的应用领域,接下来就是针对具体的领域关注点,确定性能目标(指标);其中需要和其他业务部门进行沟通协商,以及结合当前系统的响应时间等数据,确定 最终我们需要达到的响应时间和系统资源使用率等目标;比如: ①登录请求到登录成功的页面响应时间不能超过2秒; ②报表审核提交的页面响应时间不能超过5秒; ③文件的上传、下载页面响应时间不超过8秒; ④服务器的CPU平均使用率小于70%,内存使用率小于75%; ⑤各个业务系统的响应时间和服务器资源使用情况在不同测试环境下,各指标随负载变化的情况等; d.制定测试计划的实施时间 预设本次性能测试各子模块的起止时间,产出,参与人员等等。 (3)测试脚本设计与开发 性能测试中,测试脚本设计与开发占据了很大的时间比重。 a.测试环境设计 本次性能测试的目标是需要验证系统在实际运行环境中的性能外,还需要考虑到不同的硬件配置是否会是制约系统性能的重要因素!因此在测试环境中,需要部署多个不同的测试环境, 在不同的硬件配置上检查应用系统的性能,并对不同配置下系统的测试结果进行分析,得出最优结果(最适合当前系统的配置)。 这里所说的配置大概是如下几类: ①数据库服务器 ②应用服务器 ③负载模拟器 ④软件运行环境,平台 测试环境测试数据,可以根据系统的运行预期来确定,比如需要测试的业务场景,数据多久执行一次备份转移,该业务场景涉及哪些表,每次操作数据怎样写入,写入几条,需要多少的 测试数据来使得测试环境的数据保持一致性等等。 可以在首次测试数据生成时,将其导出到本地保存,在每次测试开始前导入数据,保持一致性。 b.测试场景设计 通过和业务部门沟通以及以往用户操作习惯,确定用户操作习惯模式,以及不同的场景用户数量,操作次数,确定测试指标,以及性能监控等。 c.测试用例设计 确认测试场景后,在系统已有的操作描述上,进一步完善为可映射为脚本的测试用例描述,用例大概内容如下: 用例编号:查询表单_xxx_x1(命名以业务操作场景为主,简洁易懂即可) 用例条件:用户已登录、具有对应权限等。。。 操作步骤: ①进入对应页面。。。。。。 ②查询相关数据。。。。。。 ③勾选导出数据。。。。。。 ④修改上传数据。。。。。。 PS:这里的操作步骤只是个例子,具体以系统业务场景描述; d.脚本和辅助工具的开发及使用 按照用例描述,可利用工具进行录制,然后在录制的脚本中进行修改;比如参数化、关联、检查点等等,最后的结果使得测试脚本可用,能达到测试要求即可; PS:个人而言,建议尽量自己写脚本来实现业务操作场景,这样对个人技能提升较大;一句话:能写就绝不录制!!! (4)测试执行与管理 在这个阶段,只需要按照之前已经设计好的业务场景、环境和测试用例脚本,部署环境,执行测试并记录结果即可。 a.建立测试环境 按照之前已经设计好的测试环境,部署对应的环境,由运维或开发人员进行部署,检查,并仔细调整,同时保持测试环境的干净和稳定,不受外来因素影响。 b.执行测试脚本 这一点比较简单,在已部署好的测试环境中,按照业务场景和编号,按顺序执行我们已经设计好的测试脚本。 c.测试结果记录 根据测试采用的工具不同,结果的记录也有不同的形式;现在大多的性能测试工具都提供比较完整的界面图形化的测试结果,当然,对于服务器的资源使用等情况,可以利用一些计数器或 第三方监控工具来对其进行记录,执行完测试后,对结果进行整理分析。 (5)测试分析 a.测试环境的系统性能分析 根据我们之前记录得到的测试结果(图表、曲线等),经过计算,与预定的性能指标进行对比,确定是否达到了我们需要的结果;如未达到,查看具体的瓶颈点,然后根据瓶颈点的具体数据, 进行具体情况具体分析(影响性能的因素很多,这一点,可以根据经验和数据表现来判断分析)。 b.硬件设备对系统性能表现的影响分析 由于之前设计了几个不同的测试环境,故可以根据不同测试环境的硬件资源使用状况图进行分析,确定瓶颈是再数据库服务器、应用服务器抑或其他方面,然后针对性的进行优化等操作。 c.其他影响因素分析 影响系统性能的因素很多,可以从用户能感受到的场景分析,哪里比较慢,哪里速度尚可,这里可以根据2\5\8原则对其进行分析; 至于其他诸如网络带宽、操作动作、存储池、线程实现、服务器处理机制等一系列的影响因素,具体问题具体分析,这里就不一一表述了。 d.测试中发现的问题 在性能测试执行过程中,可能会发现某些功能上的不足或存在的缺陷,以及需要优化的地方,这也是执行多次测试的优点。
- 你有使用过loadrunner吗?能简述一下操作步骤吗
答: (1)创建脚本、创建脚本、选择协议、录制脚本、编辑脚本、检查修改脚本是否有误。 (2)用中央控制器来调度虚拟用户,创建场景、选择脚本、设置机器虚拟用户数、设置事务、如果模拟多机测试、设置IP。 (3)运行脚本。 (4)分析测试结果
- 什么时候能够开始执行性能测试
答: 一般都是项目后期进行性能测试,有个性能测试表,列出很多条目,标准是根据需内部谈论定义,比如打开一个文件小于15s,超过太多就是BUG。 也可以回复: 在产品相对比较稳定,功能测试结束后,灵活性比较强。
- 什么是集合点
答: 集合点主要是用聚集虚拟用户的,在controller中可以对集合点触发条件进行设置,当虚拟用户到达集合点后会停止接下来要进行的操作,直到满足集合点的触发条件,此时在集合点上的用户同时开始操作相同的动作,也就形成了所谓的“并发”;简而言之就是可以设置并发数。 设置多个用户到达某个用户数量点集合,同时触发一个事务,以达到模拟真实环境下同时多个用户操作,同时模拟负载,实现性能测试的最终目的。 LR_rendezvous(“集合点名称”)
- 什么是场景?场景的重要性是什么?如何设置场景
答: 场景用于模拟用户实际业务操作; LoadRunner中场景有手工场景和面向目标的场景。 设置场景:选择场景类型、设置运行时设置、模拟用户数、加减压方式、持续时间,配置负载生成器。
- 为什么要创建参数?如何创建参数
答: 参数:在环境变化时必须时脚本具有环境变化的能力,就需要参数化(客户端发送到服务器端) 1.确定要参数话的数据 2.设定规则形式来取值
- 请解释一下自动关联与手动关联的区别
答: 关联就是把脚本中某些写死(固定)的数据,转变成动态的数据,或者说将前面语句的结果数据保存下来,然后在后面的语句提交请求时使用这些数据。 【需要关联的前提条件】: 客户端需要从服务器端返回数据中获取部分数据,并将这些部分数据处理后作为自己下一次请求的一部分发出。 【不同】:自动关联是在脚本录制过程中,VuGen会根据已经制定好的规则,自动找出需要关联的值或脚本录制完成后,执行脚本一次,通过Correlation Studio自动找出需要关联的数据,并建立关联;而手动关联是需要录制两份相同业务流程的脚本,输入的数据要相同,利用WinDiff工具,找出两份脚本之间不同之处,也就是需要关联的数据,再通过web_reg_save_param函数手动建立关联,将脚本中用到关联的数据参数化。
- 什么是逐步递增,又是如何来设置的呢
答: Ramp up这个选项用于逐渐增加服务器的虚拟用户数或负载量。设置一个初始值而且可以在两个迭代之间设置一个值等待。设置Ramp up,请到‘Scenario Scheduling Options’。
- 响应时间与吞吐量关系是什么
答: 吞吐量图显示的是虚拟用户每秒钟从服务器接收到的字节数。当和响应时间比较时,可以发现随着吞吐量的降低,响应时间也降低,同样的,吞吐量的峰值和最大响 应时间差不多在同时出现。
- 如果web服务器、数据库以及网络正常情况下,问题会出现在哪里
答: 问题可能出在系统本身或应用服务器、或为应用编写的代码编写中。
- 如何发现数据库相关的问题
答: 可以通过数据库监控器和数据资源图发现数据库相关的问题,例如在运行Controller之前,可以指定需要度量的资源,之后可以根据监控的数据,分析数据库相关的问题。
- think time有什么作用
答: 是在性能测试脚本中,事务与事务之间会有一些短暂的停顿,就好像真实用户在操作时,两次操作之间的停留时间,需要考虑一下。所以我们设置考虑时间是为了保证测试复合业务时,各个业务之间的比例关系符合我们的真实生产环境。
- 性能测试一般你会关注哪些参数
答: 管理员角度关注的点: (1)响应时间 (2)服务器资源使况是否合理 (3) 应用服务器和数据库资源使用是否合理 (4)系统能否实现扩展 (5)系统最多支持多少用户访问、系统最大业务处理量是多少 (6)系统性能可能存在的瓶颈在哪里 (7)更换那些设备可以提高性能 (8)系统能否支持7×24小时的业务访问 开发设计人员角度关注的点: (1).架构设计是否合理 (2).数据库设计是否合理 (3).代码是否存在性能方面的问题 (4).系统中是否有不合理的内存使用方式 (5).系统中是否存在不合理的线程同步方式 (6).系统中是否存在不合理的资源竞争 软件测试人员角度关注的点: (1).TPS和响应时间 (2).服务器资源使况是否合理 (3).应用服务器和数据库资源使用是否合理 (4).系统能否实现扩展 (5).系统最多支持多少用户访问、系统最大业务处理量是多少 (6).系统性能可能存在的瓶颈在哪里 (7).更换那些设备可以提高性能 (8).系统能否支持7×24小时的业务访问 (9)也会关注一些SQL性能
- JVM原理是什么
答: (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接的交互。 (2) 运行过程: 我们都知道Java源文件,通过编译器,能够生产相应的.Class文件,也就是字节码文件,而字节码文件又通过Java虚拟机中的解释器,编译成特定机器上的机器码 。 也就是如下: ① Java源文件—->编译器—->字节码文件 ② 字节码文件—->JVM—->机器码 每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也就是Java为什么能够跨平台的原因了 ,当一个程序从开始运行,这时虚拟机就开始实例化了,多个程序启动就会存在多个虚拟机实例。程序退出或者关闭,则虚拟机实例消亡,多个虚拟机实例之间数据不能共享。 (3) 三种JVM: ① Sun公司的HotSpot; ② BEA公司的JRockit; ③ IBM公司的J9 JVM; 在JDK1.7及其以前我们所使用的都是Sun公司的HotSpot,但由于Sun公司和BEA公司都被oracle收购,jdk1.8将采用Sun公司的HotSpot和BEA公司的JRockit两个JVM中精华形成jdk1.8的JVM。 JVM调优主要就是优化 Heap堆 和 Method Area 方法区。 一般这是开发的知识面,我们可以适当的了解部分,对于面试官你了解过就行了,不需要懂太多。
- 设计性能方案设计方法和思路
答: 第一步获取性能需求 需求一:用户数信息 1)调查系统当前和未来使用的用户数 系统用户数=本系统目前注册的用户数,注册用户数并不代表他会每天并且无时无刻的使用着。 在线用户数=同时在线对系统进行操作的用户数量(相当于混合场景) 并发用户数=同时在线并且同时操作同一个功能(单场景添加集合点) 估算未来一到五年使用此用户的数量,可以根据一些日志数据估算出来的。 2)调查系统当前和未来的每日、月活跃用户数 当前活跃用户数,即某天大概有多少用户使用本系统:那么这部分数据一说来也就是当前真正对系统构成压力的数量。 需求二:业务数据量 1)调查当前和未来背景数据量 因为从100条数据中查10条也许很快,但是未来数据量变成100w那你懂得... 2)调查当前和未来业务每天使用的总笔数 每个用户每天可能下多少笔单,平均需要多少次来执行这个操作?那么根据用户数,我们就可以确定每天下单的笔数。如50人,平均每人每天下10次,每次下100笔,那么总笔数就是50*10*100=50000笔。注意此数据根据TPS换算后,我们可以换算出系统的业务总处理量是否能达到这个数据,这也是一个很重要的指标。 3)调查当前和未来高峰时业务的总笔数 即上面所描述的特殊情况,这也是必须要考虑,并且拿到的数据。 需求三:场景业务的调查 1)系统关键、核心的业务 从系统亮点出发,以主要的业务逻辑点为第一核心:这些功能对系统或公司来说往往具有举足轻重的地位,无论怎样都必须要优先执行满足这以功能的性能测试 2)高访问量的功能,经常承受压力的功能点 系统中表现在系统关键、核心业务前面必须要经过的地方:比如对于百度搜索来说,其核心业务是搜索功能,但是首先要面对的其高访问量对是搜索输入框加载的首页,百度首页加载即高访问量的请求 3)业务复杂度高 往往说来业务逻辑复杂度的都具备1、2点的要素,可能其功能使用的人数较少但是对系统有很严重影响:这些功能由于其业务逻辑具有的复杂度,往往出错的可能性也比较高,所以这些功能也是必须要进行测试的。 需求四、与性能指标指标相关的调查 1、调查每秒事务数(TPS) 这是衡量系统处理能力的一个重要指标,同时这个指标在一定程序也关系到业务数量是否能够及时完成,所以需要获得。 估算方式一:BS类可以参考以下指标估算:Vuser*TRequest/RPS=TPS(注意1Requset的含义为Resource=0的请求)。Resource=0的含义其实就是保证此次请求能够真正到达服务器,去掉那些本地可以缓存的东西。 估算方式二:CS类可以参考每小时的业务数/3600s,这是没办法的办法。 估算方式三:API类往往要求是Vuser*1API=TPS,由于公司的API都是提供给机构用户的,所以API要求往往比较高,所以需要保证其远算得非常快。 注:Vuser:虚拟用户数;TRequest:事务中的请求数;RPS:平均响应时间。 2、调查90%(或95%)响应时间 只看平均时间是不太科学的,对于我们的系统来说需要保证绝大多数的用户其响应时间都是非常快的,所以我们从90%或95%用户响应时间为指标的标准。 如果拿不到,那么我们仍可以估算: 估算方式一.BS类,按通用的标准2一5一8的标准来进行。不同业务,不同客户类型要求不同,但对于我们的产品来说绝大多数是不能超过5s 估算方式二:CS类,根据处理的数据量其时间不同,但一般说来是不能超过15s的。 估算方式三:API类,从行业的角度来说,一般要求是毫秒级(<500ms) 3、平均响应时间和TPS的波动率 这是对响应时间的补充,要求其系统响应时间应尽量稳定,TPS的波动率受测试方法和思考、间隔时间的影响。可参考以下的计算方式: T=(TPS标准差/TPS平均值)*100%一般说来小于10% T= (RPS标准差/RPS平均值)*100%一般说来小于10%
- 如何测试MQ
答: 如果只验证消息队列本身的性能,主要注意以下三点: 1、生产能力(即消息入队列的速率); 2、消费能力(MQ系列的消费者可配置不同的数量); 3、消息积压能力(kafka相比于MQ就拥有更好的消息积压能力); 不过真正测试的话,还是要结合具体的业务场景来说,常见的消息队列应用场景如下: APP端的消息全量推送、短信通知、大数据量下的批处理。 测试工具,推荐jmeter,扩展性较好,协议支持能力强。 还有个注意点就是,在生成消息入栈时,注意对应的类名和方法名,以及数据类型,有时候需要你去反编译jar包来获得。
- 压测中的TPS上不去原因是什么
答: (1)网络带宽 在压力测试中,有时候要模拟大量的用户请求,如果单位时间内传递的数据包过大,超过了带宽的传输能力,那么就会造成网络资源竞争,间接导致服务端接收到的请求数达不到服务端的处理能力上限。 (2)连接池 可用的连接数太少,造成请求等待。连接池一般分为服务器连接池(比如Tomcat)和数据库连接池(或者理解为最大允许连接数也行)。 (3)垃圾回收机制 从常见的应用服务器来说,比如Tomcat,因为java的的堆栈内存是动态分配,具体的回收机制是基于算法,如果新生代的Eden和Survivor区频繁的进行Minor GC,老年代的full GC也回收较频繁,那么对TPS 也是有一定影响的,因为垃圾回收其本身就会占用一定的资源。 (4)数据库配置 高并发情况下,如果请求数据需要写入数据库,且需要写入多个表的时候,如果数据库的最大连接数不够,或者写入数据的SQL没有索引没有绑定变量,抑或没有主从分离、读写分离等, 就会导致数据库事务处理过慢,影响到TPS。 (5)通信连接机制 串行、并行、长连接、管道连接等,不同的连接情况,也间接的会对TPS造成影响。 (关于协议的连接,可参考之前的博客:HTTP协议进阶:连接管理) (6)硬件资源 包括CPU(配置、使用率等)、内存(占用率等)、磁盘(I/O、页交换等)。 (7)压力机 比如jmeter,单机负载能力有限,如果需要模拟的用户请求数超过其负载极限,也会间接影响TPS(这个时候就需要进行分布式压测来解决其单机负载的问题)。 (8)压测脚本 还是以jemter举个例子,之前工作中同事遇到的,进行阶梯式加压测试,最大的模拟请求数超过了设置的线程数,导致线程不足。 提到这个原因,想表达意思是:有时候测试脚本参数配置等原因,也会影响测试结果。 (9)业务逻辑 业务解耦度较低,较为复杂,整个事务处理线被拉长导致的问题。 (10)系统架构 比如是否有缓存服务,缓存服务器配置,缓存命中率、缓存穿透以及缓存过期等,都会影响到测试结果。 PS:性能瓶颈分析不能单从局部分析,要综合起来,多维度分析问题原因。上面列出的几点,可能有描述不当或者遗漏的,仅供参考。
- 测试环境与生产环境服务器配比如何选择
答: 服务器配置版本保持一致,容量测试后等量代换、考虑边际递减效应、容灾方案
- 如何识别性能瓶颈,如何分析
答: 自上而下,从局部到整体,瓶颈分析粒度
- 如何准备测试数据,以防数据污染
答: 生产数据备份、数据隔离、测试数据落入影子库、挡板、Mock
- 哪个函数是用来截取虚拟用户脚本中的动态值
答: Web_reg_save_param函数主要根据需要做关联的动态数据前面和后面的固定字符串来识别、提取动态数据,所以在做关联时,需要找出动态数据的左、右边界字符串。 a.函数原型: int web_reg_save_param (const char *ParamName, <List of Attributes>, LAST); b.参数说明: ParamNam:存放动态数据的参数名称 List of Attributes:其它属性,包含Notfound、LB、RB、RelFrameID、Search、ORD、SaveOffset、Convert、SaveLen。 Notfound:指当找不到要找的动态数据时,怎么处理。 Notfound=error,当找不到动态数据时,发出一个错误信息,为LoadRunner的默认值。 Notfound=warning,当找不到动态数据时,不发出错误信息,只发出警告,脚本会继续执行下去不会中断。 LB:动态数据的左边界字符串,该参数为必选参数,并区分大小写。 RB:动态数据的右边界字符串,该参数为必选参数,并区分大小写。 ORD:指提取第几次出现的左边界的数据,该参数为可选参数,默认值是1。假如值为All,则查找所有符合条件的数据并把这些数据存储在数组中。 Search:搜寻的范围。可以是Headers(只搜寻Headers)、Body(只搜寻Body部分,不搜寻Headers)、Noresources(只搜寻Body部分,不搜寻Header与Resource)或是All(搜寻全部范围,此为默认值),该参数为可选参数。 RelFrameID:相对于URL而言,欲搜寻的网页的Frame,此属性可以是All或是具体的数字,该参数为可选参数。 SaveOffset:当找到符合的动态数据时,从第几个字符开始才存储到参数中,该参数为可选参数,此属性值不可为负数,其默认值是0. Convert:可能的值有两种: HTML_TO_URL:将HTML-encoded数据转成URL-encoded数据格式。 HTML_TO_TEXT:将HTML-encoded数据转成纯文字数据格式。 SaveLen:从Offset开始算起,到指定长度内的字符串,才储存到参数中,该参数为可选参数,默认值为-1,表示储存到结尾整个字符串。
- 如何识别系统瓶颈
答: 性能瓶颈分为:硬件瓶颈和软件瓶颈。 性能瓶颈可以通过监控器来分析发现,这些监控器包括应用服务器监控、web服务器监控、数据库服务器监控器和网络监控器;它们可以帮助分析导致响应时间增加的原因;性能度量一般包括响应时间、吞吐量、每秒点击率、网络延迟等等。
- 进行参数化的目的是什么
答: 参数化的目的在于模拟更加接近真实环境的数据。 如果不做参数化,那么在发送数据的时候,始终发送的是录制时记录的数据,没有任何变化,不过实际中这个是不可能的,比如网站的用户登陆,每个人都有自己的用户名和密码,那么在工具中可以通过参数化用户名,密码,就可以让每次发送的数据都是相对独立的,这个不用参数化的情况就是所有模拟的用户使用的都是一个账号和密码。
- 常用的性能指标的名称与含义是什么,请解释一下
答: (1)并发: 所有用户在同一时间段对系统执行的操作,一般是指做同一件事情或者一个动作。 (2)在线: 所有用户在一段时间内对系统执行操作。 (3)请求响应时间: 从Client端发送请求得到响应的整个时间; 包含Client端响应时间+网络响应时间+Server端响应时间。 (4)事务请求响应时间: 完成相应事务所用的时间,这是一般在性能测试中重点关注的一项指标。 (5)TPS: 每秒钟系统能够处理的交易或者事务数量。它是衡量系统处理能力的重要指标。 (6)点击率: 每秒发送的http请求数量;主要是看点击率越大的情况下对Server端的压力情况。 一般来讲,点击率越大,Server压力越大。 (7)资源利用率: 对不同资源的使用程度,比如内存、I/O、CPU等,一般不会超过80%。 (8)QPS 每秒查询率,在数据库中每秒执行的SQL数量。也是衡量服务端处理能力的一个指标之一,一般不建议使用。 (9)RPS 每秒请求数,用户从客户端发送的请求数。 用户在那一秒点击一次,然后发送了3个请求,这3个请求分别调了A服务,B服务,C服务各自两次。但是这个RPS是3 并不是2+2+2。 (10)HPS 每秒点击数,可以直接理解为用户在界面上的点击次数。一般在性能测试中,都是用来描述Http Request,它代表每秒发送的http请求数量,和RPS概念一样。 (11)CPS/CPM 每秒或每分钟调用的次数。通常来描述Service服务层的单位时间内被其他服务调用的次数。 (12)吞吐量 单位时间内,网络处理的请求数量(事务/S),网络没有瓶颈时,吞吐量≈TPS。
- 性能测试都分为哪些种类
答: (1)性能测试:性能测试通常泛指所有类型的性能测试,目标是在特定条件下验证软件系统的性能是否达到预期指标的结果。 (2)负载测试:负载测试是指模拟真实的用户行为,通过不断加压直到系统性能测试瓶颈或资源达到饱和。负载测试是最常进行的性能测试,用于测量系统的容量,发现系统瓶颈并配合性能调优。 (3)压力测试:压力测试是指测试系统在一定的饱和状态下系统的处理能力。在负载测试的基础上,继续不断加压到一定阶段。通过压力测试通过CPU使用率达到75%以上或者内存使用率达70%以上(具体的压力指标也可以是数据库达到相关指标,或者中间件连接数达到某种指标等等),用于测试系统在压力环境下的稳定性。 注:许多开发人员提出测试申请,说要做一个压力测试,做为专业的性能测试人员,那么需要明确测试需求,开发人员说的压力测试,往往不是真正意义上的压力测试 (4)可靠性测试:可靠性测试是指加载一定的业务压力,同时让压力持续运行一段时间,测试系统是否可以稳定运行。 (5)并发测试:并发测试是模拟用户在访问同一应用的测试,用于发现并发问题,例如线程锁、资源争用、数据库死锁等。 (6)配置测试:配置测试是指验证各种配置对系统性能的影响,常用于性能调优和能力规划。 (7)疲劳强度测试:在系统稳定运行情况下,以能够支持的最大并发用户数或日常运行用户数,持续执行业务操作一段时间,通过综合分析交易执行指标和资源监控指标,来确定系统处理最大工作强度的性能表现。 (8)大数据量测试:大数据量测试侧重点在于数据的量上,包括独立的数据量测试和综合数据量测试。独立的数据量测试可以理解为某些系统存储、传输、统计、查询等业务进行大数据量测试,而综合数据量测试一般和压力测试、负载测试、疲劳强度测试相结合进行。 综上所述:在进行性能测试之前,需明确此次性能测试的测试需求,针对不同的测试需求,性能测试人员采取不同的测试策略,这点非常重要。
- 压力测试与性能测试的区别是什么
答: 性能测试,主要是通过测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 压力测试是性能测试的其中一种。压力测试通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大的服务级别的测试。通俗地讲,压力测试时为了发现在什么条件下你的应用程序的性能变得不可接受。在压力测试中,可以采取两种不同的压力情况——用户量压力测试或数据量压力测试。进行压力测试主要有希望找到两种错误类型:内存泄露、并发与同步。
- 性能测试方法中的258、28原则是什么
答: 当用户能够在2秒以内得到响应时,会感觉系统的响应很快; 当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以; 当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受; 而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应,而选择离开这个Web站点,或者发起第二次请求。 二八原则还指:80%的业务量在20%的时间里完成。 如何理解,下面我们来个例子吧 用户登录场景:早高峰时段,8:50---9:10,5000坐席上线登陆。 业务量:5000个 时间:20x60=1200秒 吞吐量=80%x业务量/(20%*时间)=4000/240=16.7/秒 而并非5000/1200=4.1/秒 实际上,登录请求数分布是一个正态分布,最高峰时肯定比4.1/秒更高,高峰段实际上完成了80%的业务量,却只花了20%的时间。 温馨提示: 1.二八原则计算的结果并非在线并发用户数,是系统要达到的处理能力(吞吐量),初学者容易被误导,那这这个数据就去设置并发数,这是错误滴。 2.如果你的系统性能要求更高,也可以选择一九原则或更严格的算法,二八原则比较通用,一般系统性能比较接近这个算法而已,大家应该活用。
- 在使用Jmeter压测过程中,需要对正规线程组进行吞吐量控制,应该使用哪一种定时器
答: Constant Throughput Timer
- 性能测试过程中需要监控OS哪些资源
答: CPU、内存、磁盘、网络
- web系统用户最关注的性能指标是什么
答: 响应时间
- 请描述什么是系统性能的拐点
答: 性能开始急剧下降的点
- 请解释一下如何录制web脚本
答: loadrunner通过转发请求,来捕获数据包,来形成脚本。
- 如何发现web服务器的相关问题
答: 可以利用web资源监控器发现web服务器相关问题,在场景执行过程中,可以利用监控器分析web服务器吞吐量、每秒点击率、每秒HTTP响应数、每秒页面下载数,以及web服务器硬件资源使用情况等。
- 设计性能测试方案需要考虑哪些问题
答: 时间成本、人力成本、环境&脚本可复用性、实现难度等
- 常见的性能测试策略有什么
答: 基准测试、并发测试、综合场景测试、场景测试、负载测试、疲劳测试、极限测试、吞吐量测试、大数据测试、内存泄漏测试等。
- 影响Web前端页面性能一般不包括下面哪个
答: A服务器数据返回延迟 B网络传输速率 C磁盘空间不够 D页面渲染
- 请解释什么是内存泄漏,危害有哪些
答: 内存泄漏是指对象不再被应用程序使用,但是垃圾回收器却不能回收它们,因为它们正在被引用。 对于长时间运行的程序来说,内存泄漏会使程序占用的内存一直增加,最后就会出现内存耗尽而导致宕机,即使不宕机也会是系统的运行越来越慢,还有就是有些内存有其他资源,比如数据库连接,网络连接等等这些,如果在网上会出现阻塞。
- 请解释一下什么是资源竞争,场景资源竞争有哪些
答: 多个用户都去用同一个东西,但这个东西被一人锁定,就产生了资源竞争。 java多线程资源竞争
- 验证系统在100 TPS下,响应时间小于3s,对于这样的需求,应该采用哪种性能测试方法
答: 能力评估
- 请描述什么时候性能平坦区
答: 系统性能最优秀的区间,该区域可被用作基线。性能不断加压,没有什么变化。
- 对于一个缺乏性能明确需求的项目,你是如何提取性能需求的
答: 与客户交流,查看历史日志,跟同类产品对比,根据以往的经验。
- 描述功能测试、性能测试、自动化测试、接口测试他们之间的关联性
答: 功能测试->接口测试 ->性能测试->自动化测试 接口测试也算是功能测试的一种
安全性测试:
注:安全测试很少有公司会用到,尽量了解一下
- 什么是安全测试,目的是什么,流程是什么
答: 安全测试是在所有类型的软件测试中,安全测试可以被认为是最重要的。其主要目的是在任何软件(Web或基于网络)的应用程序中找到漏洞,并保护其数据免受可能的攻击或入侵者。由于许多应用程序包含机密数据,需要被保护泄漏。软件测试需要定期在这样的应用程序上进行,以识别威胁并立即采取行动。 目的是提升软件产品的安全质量,尽量在发布前找到安全问题予以修补降低成本,电量安全,验证安装在系统内的保护机制能否在实际应用中对系统进行保护,使之不被非法入侵。 流程一般为部署与基础结构、输入验证、身份验证、授权、配置管理、敏感数据、会话管理、加密、参数操作、异常管理、审核和日志记录。
- 什么是漏洞
答: 漏洞可以被定义为任何系统的弱点(Vulnerability),入侵者或bug可以通过该系统进行攻击。如果系统没有严格执行安全性测试,那么漏洞的机会就会增加。有时补丁或修复程序需要防止系统出现漏洞。
- 什么是入侵检测
答: 入侵检测(Intrusion Detection)是帮助确定和处理可能的攻击的系统。入侵检测包括从多个系统和源收集信息,分析信息,找出可能的攻击方式。 入侵检测检查如下: 1.可能的攻击 2.任何异常活动 3.审核系统数据 4.不同采集数据的分析等。
- 什么是SQL注入
答: SQL注入是黑客获取关键数据的常用攻击技术之一。 黑客检查系统中的任何循环漏洞,通过这些漏洞,他们可以通过SQL查询传递安全检查并返回关键数据。这就是所谓的SQL注入。它可以允许黑客窃取关键数据,甚至使系统崩溃。 SQL注入非常关键,需要避免。定期的安全测试可以防止此类攻击。SQL数据库安全性需要正确定义,输入框和特殊字符应该正确处理。
- 列出安全测试的关注点
答: (1)Authentication (2)Authorization (3)Confidentiality (4)Availability (5)Integrity (6)Non-repudiation (7)Resilience
- 什么是XSS
答: XSS或跨站点脚本是黑客用来攻击web应用程序的漏洞类型。 它允许黑客将HTML或JAVASCRIPT代码注入网页,网页可以从cookie中窃取机密信息并返回给黑客。这是最关键和最常见的技术之一,需要加以预防。
- 什么是SSL链接和SSL Session
答: SSL或安全套接字层连接是瞬态对等通信链路,其中每个连接与一个SSL会话(SSL Session)相关联。 SSL会话可以定义为通常由握手协议列出的客户端和服务器之间的关联。定义了一组参数,并且可以由多个SSL连接共享。
- 什么是渗透测试
答: 渗透测试(Penetration Testing)是关于安全测试的,它有助于识别系统中的漏洞。渗透测试是试图通过手动或自动技术来评估系统的安全性,以及如果发现任何漏洞测试人员使用该漏洞来更深入地访问系统并发现更多漏洞。此测试的主要目的是防止系统受到任何可能的攻击。 渗透测试可以通过两种方式进行——白盒测试和黑盒测试。 在白盒测试中,测试人员可以使用所有信息,而在黑盒测试中,测试人员没有任何信息,他们在真实场景中测试系统以找出漏洞。
- 你为什么要渗透测试
答: 渗透测试很重要,因为: 1.由于攻击的威胁总是可能的,黑客可以窃取重要数据,甚至使系统崩溃,因此系统中的安全漏洞和环路漏洞可能非常昂贵。 2.不可能一直保护所有的信息。黑客总是会带来新的技术来窃取重要数据,以及测试人员需要定期执行测试以检测可能的攻击。 3.渗透测试通过上述攻击来识别和保护系统,并帮助组织保持其数据安全。
- 请说出你常用的一些安全测试工具
答: 以下工具适当了解 (1)AppScan 一款安全漏洞扫描工具,支持Web和移动,现在安全测试做漏洞扫描非常适用,它相当于是"探索"和"测试"的过程,最终生成很直观的测试报告,有助于研发人员分析和修复通常安全测试工具用这个,扫描一些安全漏洞,用起来比较方便,网上资料比较多,适合很多测试同学用,资料广阔,大家可以尝试下。参考:https://www.cnblogs.com/benpao1314/p/8065720.html (2)Burp Suite 一款信息安全从业人员必备的集 成型的渗透测试工具,它采用自动测试和半自动测试的方式,包含了 Proxy,Spider,Scanner,Intruder,Repeater,Sequencer,Decoder,Comparer等工具模块;Proxy功能可以拦截HTTP/S的代理服务器(手机和web);Spide功能-智能感应的网络爬虫;Intruder功能可以对web应用程序进行自动化攻击等,非常适合做安全测试。通 过拦截HTTP/HTTPS的web数据包,充当浏览器和相关应用程序的中间人,进行拦截、修改、重放数据包进行测试,是web安全人员的一把必备的瑞士军刀。 官网:https://portswigger.net/burp/ 参考:https://www.cnblogs.com/nieliangcai/p/6692296.html (3)Acunetix 一款网络漏洞扫描软件,它可以检测网络的安全漏洞。 官网:https://www.acunetix.com/ (4)Nmap 一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。 官网:https://nmap.org/ 参考:https://blog.csdn.net/m0_37268841/article/details/80404613 (5)sqlmap 一个开源的渗透测试工具,可以用来进行自动化检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。 官方网站:http://sqlmap.org/, 下载地址:https://github.com/sqlmapproject/sqlmap/zipball/master 演示视频:https://asciinema.org/a/46601 教程:http://www.youtube.com/user/inquisb/videos 参考:https://www.freebuf.com/sectool/164608.html (6)OpenVAS 一个开放式漏洞评估系统,也可以说它是一个包含着相关工具的网络扫描器。其核心部件是一个服务器,包括一套网络漏洞测试程序,可以检测远程系统和应用程序中的安全问题。OpenVas服务端只允许安装在Linux系统上,接下来我们来介绍一下使用二进制搭建OpenVas的方法以及基础的使用。 官网:http://www.openvas.org/ 参考:https://www.freebuf.com/column/158357.html (7)msfvenom 参考:https://www.offensive-security.com/metasploit-unleashed/msfvenom/ (8)fortify 静态代码检查工具 官网:http://www.fortify.net/README.html 参考:https://www.cnblogs.com/eyesmoon/p/7421477.html 参考:https://www.freebuf.com/sectool/95683.html (9)Drozer MWR Labs开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。官网:https://labs.mwrinfosecurity.com/publications/ 参考:https://www.cnblogs.com/lsdb/p/9441813.html (10)nessus 一款号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件,Nessus可同时在本机或远端上遥控,进行系统的漏洞分析扫描。Nessus也是渗透测试重要工具之一。所以,本章将介绍安装、配置并启动Nessus。 官网:https://www.tenable.com/downloads/nessus 参考:https://www.cnblogs.com/cheyunhua/p/8084459.html (11)zap OWASP Zed攻击代理(ZAP)是世界上最受欢迎的免费安全审计工具之一,由数百名国际志愿者*积极维护。它可以帮助您在开发和测试应用程序时自动查找Web应用程序中的安全漏洞。 官网:https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project 参考:https://www.fujieace.com/kali-linux/owasp-zed-zap.html
- 请说出用于保护密码文件的至少两种常见的技术
答: 保护密码文件的两种常见技术是散列密码和salt值或密码文件访问控制。
- 请列出一些与软件安全相关的名词缩写
答: 英文表达: IPsec – Internet Protocol Security is a suite of protocols for securing Internet OSI – Open Systems Interconnection ISDN Integrated Services Digital Network SSL- Secure Sockets Layer FTP – File Transfer Protocol DBA – Dynamic Bandwidth Allocation DDS – Digital Data System DES – Data -Encryption Standard CHAP – Challenge Handshake Authentication Protocol BONDING – Bandwidth On Demand Interoperability Group SSH – The Secure Shell COPS Common Open Policy Service ISAKMP – Internet Security Association and Key Management Protocol USM – User-based Security Model TLS – The Transport Layer Security 中文表达: IPsec——Internet协议安全是一套用于保护Internet安全的协议 OSI——开放系统互连 ISDN综合业务数字网 SSL—安全套接层 FTP-文件传输协议 DBA——动态带宽分配 DDS-数字数据系统 DES——数据加密标准 CHAP——挑战握手认证协议 绑定——带宽随需应变互操作组 SSH——安全壳 COPS共同开放政策服务 ISAKMP——因特网安全协会和密钥管理协议 USM——基于用户的安全模型 TLS——传输层安全性
- 什么是ISO/IEC 17799
答: ISO/IEC 17799最初在英国出版,定义了信息安全管理的最佳实践。它针对所有小型或大型信息安全组织都有指导方针。
- 请你说出可能导致软件系统存在漏洞的原因
答: 造成漏洞的因素有: 1.设计缺陷——如果系统中存在允许黑客轻易攻击系统的环路漏洞。 2.密码——如果黑客知道密码,他们可以很容易地获得信息。应严格遵守密码政策,以尽量减少密码被盗的风险。 3.复杂性——复杂软件可以打开漏洞的大门。 4.人为错误——人为错误是安全漏洞的重要来源。 5.管理——数据的管理不当会导致系统中的漏洞。
- 请你说出能够进行安全测试的方法论
答: 安全测试的方法论有: 白盒测试- 所有信息都提供给测试人员。 黑盒测试- 没有信息数据提供给测试人员,需要他们自己从现有系统测试 灰盒测试- 测试人员需要掌握部分信息,其余的必须由他们自己承担。
- 请你说出开源安全测试方法手册7种主要类型的安全测试
答: 根据开源安全测试方法手册,7种主要的安全测试类型是: 1.漏洞扫描:自动软件针对已知的漏洞扫描系统。 2.安全扫描:手动或自动识别网络和系统弱点的技术。 3.渗透测试:渗透测试是关于安全测试的,它有助于识别系统中的漏洞。 4.风险评估:包括对系统中可能的风险进行分析。风险分为低、中、高三种。 5.安全审计:完成对系统和应用程序的检查,以检测漏洞。 道德黑客:为检测系统中的缺陷而非个人利益而对系统进行的黑客攻击。 7.态势评估:将安全扫描、道德黑客和风险评估结合起来,以显示组织的总体安全态势。
- 什么是SOAP and WSDL
答: SOAP或简单对象访问协议是基于XML的协议,应用程序通过该协议通过HTTP交换信息。XML请求由SOAP格式的Web服务发送,然后SOAP客户端向服务器发送SOAP消息。服务器再次用SOAP消息和请求的服务进行响应。 Web服务描述语言(WSDL):是UDDI使用的XML格式语言。“Web服务描述语言描述Web服务以及如何访问它们”。
- 请你说出SSL session connection中定义的参数
答: 定义SSL会话连接的参数为: 服务器和客户端随机 服务器写入MACsecret 客户端写MACsecret 服务器写密钥 客户端写密钥 初始化向量 序列号
- 什么是file enumeration
答: 这种攻击使用强制浏览和URL操作攻击。黑客可以操纵url字符串中的参数,获得通常不向公众开放的关键数据,如已实现的数据、旧版本或正在开发的数据。
- 入侵检测系统有什么优点(比如 intrusion detection system)
答: 入侵检测系统有三个优点。 (1)NIDS或网络入侵检测 (2)NNIDS或网络节点入侵检测系统 (3)HIDS或主机入侵检测系统
- 什么是HIDS
答: HIDS或主机入侵检测系统是一种对现有系统进行快照,并与以前的快照进行比较的系统。它检查是否修改或删除了关键文件,然后生成警报并发送给管理员。
- List down the principal categories of SET participants(列举Set参与者类别)
答: 以下参与者: 持卡人 商人 发行人 收购 支付网关 认证机构
- 解释一下什么是URL操纵
答: URL操纵是黑客操纵网站URL获取关键信息的一种攻击。该信息在查询字符串中的参数中通过HTTP GET方法在客户机和服务器之间传递。黑客可以更改这些参数之间的信息,并在服务器上获得身份验证并窃取关键数据。 为了避免这种攻击,需要进行URL操作的安全性测试。测试人员本身可以尝试操作URL并检查可能的攻击,如果发现它们可以防止此类攻击。
- 常见的三种入侵者都有哪些
答: Masquerader:它可以被定义为在计算机上未被授权但攻击系统的访问控制并获得经过身份验证的用户帐户的访问的个人。 Misfeasor:在这种情况下,用户被认证为使用系统资源,但是他未能使用对系统的访问。 Clandestine user:可以定义为攻击系统的控制系统并绕过系统安全系统的个人。
- 什么是端口扫描
答: 端口是信息进出任何系统的点。扫描端口以发现系统中的任何环形孔称为端口扫描。系统中可能存在黑客攻击和获取关键信息的弱点。这些点应该被识别并防止任何滥用。常见的Port Scanning类型: 频闪:扫描已知服务。 UDP:扫描打开的UDP端口 Vanilla:在此扫描中,扫描仪尝试连接到所有65,535端口。 扫描:扫描仪连接到多台机器上的同一端口。 碎片数据包:扫描程序发送通过防火墙中简单数据包过滤器的数据包碎片 隐形扫描:扫描仪阻止被扫描的计算机记录端口扫描活动。 FTP反弹:扫描仪通过FTP服务器以掩盖扫描源。
- 请列出SSL中常用到的组件有哪些
答: 安全套接字层协议或SSL用于在客户端和计算机之间建立安全连接。以下是在SSL中使用的组件: (1)SSL记录协议 (2)握手协议 (3)更改密码规范 (4)加密算法
- 什么是Cookie
答: Cookie是从Web服务器接收并存储在浏览器中的信息,以后随时可以读取。Cookie可以包含密码信息、一些自动填充信息,如果任何黑客获得这些详细信息,这可能是危险的。
- Cookie的种类有哪些
答: Session Cookies – These cookies are temporary and last in that session only. Persistent cookies – These cookies stored on the hard disk drive and last till its expiry or manually removal of it.
- 什么是honeypot
答: Honeypot是一种伪计算机系统,它表现得像一个真实的系统,并吸引黑客对其进行攻击。Honeypot用于发现系统中的环路漏洞,并为此类攻击提供解决方案。
- 请简述一下Network Intrusion Detection system?
答: Network Intrusion Detection System(NIDS)它用于分析整个子网上的传递流量,并与已知的攻击进行匹配。如果识别出任何循环漏洞,则管理员将收到警报。
- 安全测试都包含了哪些内容
答: (1)用户访问认证 (2)传输数据加密 (3)安全防护策略:如安全日志、入侵检测、隔离防护、漏洞扫描 (4)数据备份与恢复 (5)防病毒系统 (6)SQL注入、JS注入
- 什么是同源策略
答: 源就是主机、协议、端口名的一个三元组 同源策略(Same Origin Policy, SOP)是Web应用程序的一种安全模型,被广泛地应用在处理WEB内容的各种客户端上,比如各大浏览器,微软的Silverlight,Adobe的Flash/Acrobat等等。
- XSS能用来做什么
答: (1)Cookie劫持 利用浏览器插件,可以获取请求中的Cookie信息,从获取到的Cookie信息中,读取用户的私密信息。 (2)模拟GET、POST请求操作用户的浏览器。使用JavaScript模拟浏览器发包 “Cookie劫持”失效时,或者目标用户的网络不能访问互联网等情况下,这种方式非常有用 (3)XSS钓鱼 利用JavaScript在当前页面“画出”一个伪造的登录框,当用户在登录框中输入用户名与密码后,其密码将被发送到黑客的服务器 (4)获取用户浏览器信息 JavaScript脚本通过XSS读取浏览器的UserAgent对象来识别浏览器的版本。alert(navigator.userAgent) 通过JavaScript脚本区分浏览器之间的实现差异 (5)识别用户安装的软件 通过查询某些属性是否存在,从而判断是否安装了某个软件或某个插件 (6)通过CSS,来发现用户曾经访问过的网站 通过style的visited属性,来判断链接是否被访问 (7)劫持浏览器会话,从而执行任意操作,如进行非法转账、强制发表日志、发送电子邮件等 (8)强制弹出广告页面,刷流量等 (9)进行大量的客户端攻击,如DDoS攻击 (10)获取用户电脑的真实IP XSS攻击框架“AttackAPI”中,有一个获取本地IP的API 利用JAVA获取本地网络信息的API 若是不想回答那么繁琐,可以参考以下答案: 网络钓鱼、窃取用户Cookies、弹广告刷流量、具备改页面信息、删除文章、获取客户端信息、传播蠕虫
- XSS的三种类型与防御方法
答: XSS的原理是WEB应用程序混淆了用户提交的数据和JS脚本的代码边界,导致浏览器把用户的输入当成了JS代码来执行。XSS的攻击对象是浏览器一端的普通用户。 (1)反射型XSS 反射型XSS,又称非持久型XSS。也就是攻击相当于受害者而言是一次性的,具体表现在受害者点击了含有的恶意JavaScript脚本的url,而Web应用程序只是不加处理的把该恶意脚本“反射”回受害者的浏览器而使受害者的浏览器执行响应的脚本。 (2)存储型XSS 存储型XSS,也就是持久型XSS。攻击者上传的包含恶意js脚本的留言等信息被Web应用程序保存到数据库中,Web应用程序在生成新的页面的时候如果包含了该恶意js脚本,这样会导致所有访问该网页的浏览器解析执行该恶意脚本。这种攻击类型一般常见在博客、论坛等网站中。 (3)DOM型XSS DOM,全称是Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构和样式。 DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞,而且不需要与服务器进行交互。 客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。 XSS攻击防御方法: (1)对输入(和URL参数)进行过滤,对输出进行编码。 对提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。虽然对输入过滤可以被绕过,但是也还是会拦截很大一部分XSS攻击。 为了避免反射式或存储式的XSS漏洞,最好的办法是根据HTML输出的上下文(包括:主体、属性、JavaScript、CSS或URL)对所有不可信的HTTP请求数据进行恰当的转义。 在客户端修改浏览器文档时,为了避免DOM型XSS攻击,最好的选择是实施上下文敏感数据编码。 (2)使用内容安全策略(CSP)是对抗XSS的深度防御策略。
- 存储型XSS原理
答: 存储型xss是hacker向服务器注入一段js代码,代码存储到服务器的数据库中,每当用户访问服务器当中带有js代码的数据时,服务器将响应用户,返回给用户一个带有js代码页面。
- 你怎么理解XSS攻击
答: 跨站脚本攻击(Cross Site Scripting)本来的缩写为CSS,为了与层叠样式表(Cascading Style Sheets,CSS)的缩写进行区分,将跨站脚本攻击缩写为XSS。因此XSS是跨站脚本的意思。 XSS跨站脚本攻击(Cross Site Scripting),的本质是攻击者在web页面插入恶意的script代码(这个代码可以是JS脚本、CSS样式或者其他意料之外的代码),当用户浏览该页面之时,嵌入其中的script代码会被执行,从而达到恶意攻击用户的目的。比如读取cookie,session,tokens,或者网站其他敏感的网站信息,对用户进行钓鱼欺诈等。 一种被动型,在不知道的情况下触发类似无感型,在渗透很多情况下平常的渗透手段以及取得目标的信息,而XSS就能轻松获取,类似QQ邮箱你不可能渗透这么大的互联网就算可以时间成本都非常的高,XSS比较有针对性。
- DOM类型XSS与反射型XSS区别
答: (1)被攻击的对象不同 反射型XSS的被攻击对象一般是攻击者去寻找的,就比如说:一个攻击者想盗取A的QQ号,那么攻击者就可以将一个含有反射型XSS的URL链接给A,此时我们可以看出,需要将特定的URL,注意是特定的URL给A,当A点击进入链接时,就受到XSS攻击,所以这种攻击范围不是特别的广。 DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。 (2)联网 反射型XSS的脚本被解析的地方是浏览器,DOM类型XSS也是浏览器,但是反射型XSS需要联网,而DOM类型XSS不需要联网!DOM类型XSS不会经过服务器处理,而是要经过JavaScript渲染构造完Dom树后,浏览器解析时,才会被JS解析引擎解析执行。 (3)允许输入点不同 一般情况下,反射型XSS在搜索框啊,或者是页面跳转啊这些地方,而存储型XSS一般是留言,或者用户存储的地方,而DOM呢?是在DOM位置上,不取决于输入环境上。
- 如何使得前端referer为空
答: 通过地址栏输入、从书签里面选择或者浏览器的插件BurpSuite修改。
- cookie参数,security是做什么的
答: Httponly:防止cookie被xss偷 https:防止cookie在网络中被偷 Secure:阻止cookie在非https下传输,很多全站https时会漏掉 Path :区分cookie的标识,安全上作用不大,和浏览器同源冲突
- 如果SRC上报了一个XSS漏洞,payload已经写入页面,但未给出具体位置,如何快速介入
答: 看是否什么类型的XSS,XSS反射型看提交的地址,指的参数是哪个位置,通过这个页面进行fuzzing测试。如果是存储型页面查找关键字。
- XSS,CSRF,CRLF易混淆,说说三者的原理以及防御方法
答: 防护CSRF防御原理: 不让你那么容易伪造请求(cookie中加入随机数,要求请求中带上,而攻击者获取不到cookie中的随机数,验证HTTP Referer字段,在请求地址中添加takon验证 CRLF原理: HTTP拆分攻击(HTTP Splitting),CRLF是”回车 + 换行”(\r\n)的简称。 在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP 内容并显示出来。所以,一旦我们能够控制HTTP 消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码,所以CRLF Injection又叫HTTP Response Splitting,简称HRS。
- csrf如何不带referer访问
答: 通过地址栏,手动输入;从书签里面选择;通过实现设定好的手势。上面说的这三种都是用户自己去操作,因此不算CSRF。 跨协议间提交请求。常见的协议:ftp://,http://,https://,file://,javascript:,data:.最简单的情况就是我们在本地打开一个HTML页面,这个时候浏览器地址栏是file://开头的,如果这个HTML页面向任何http站点提交请求的话,这些请求的Referer都是空的。那么我们接下来可以利用data:协议来构造一个自动提交的CSRF攻击。当然这个协议是IE不支持的,我们可以换用javascript。
- csrf成因及防御措施,如果不用token如何做防御
答: X-Frame-Options DENY(禁止被 加载进任何frame) SAMEORIGIN(仅允许被加载进同域内的frame) X-XSS-Protection 0(表示禁止用这个策略) 1(默认,对危险脚本做一些标志或修改,以阻止在浏览器上熏染执行。) 1;mode=block(强制不熏染,在Chrome下直接跳转到空白页,在IE下返回一个#符号) 这个策略仅针对反射型,对付不了存储型XSS,能识别出反射型是因为提交请求的URL中带有可疑的XSS代码片段。 X-Content-Security-Policy
- Xss worm原理
答: 攻击者发现目标网站存在XSS漏洞,并且可以编写XSS蠕虫。利用一个宿主(如博客空间)作为传播源头进行XSS攻击。
- Cookie的P3P性质
答: HTTP响应头的p3字段是W3C公布的一项隐私保护推荐标准,该字段用于标识是否允许目标网站的cookie被另一个域通过加载目标网站而设置或发送,仅IE执行了该策略。
- CSRF有什么危害
答: 篡改目标网站上的用户数据、盗取用户隐私数据、传播CSRF蠕。
- 你使用什么工具来判断系统是否存在后门
答: chkrootkit Rkhunter
- 如果一台服务器被入侵后,你会如何应急响应
答: 1.准备相关的工具,查后门等工具 2.初步判断事件类型,事件等级。 3.抑制范围,隔离使爱害面不继续扩大 4.查找原因,封堵攻击源。 5.业务恢复正常水平. 6.总结,报告,并修复、监控
- 你平时使用哪些工具?以及对应工具特点
答: AWVS、Masscan、BurpSuite AWVS常规漏洞扫描,masscan快速查找端口,burp重复提交数据包 想知道是否有自己开发工具,如果没有你对每个安全工具有哪些独特的见解以及别人不知道的技巧用法。如:awvs如何批量扫描?burpsuite如何爆破401、脱库等、等等...
- 如何判断sql注入,有哪些方法
答: 提交错误语句是否有异常,除此之外这些显示的错误可以通过sleep,修眠语句执行5秒等,除此之外通过DNSlog判断是还有传回值.
- 如何判断 SQL 注入漏洞成因,如何防范?注入方式有哪些?除了数据库数据,利用方式还有哪些?
答: select * from news where id = '$SQL'; 当程序执行访问新闻等一些操作都会执行到sql语句进行调用,如果在此调用过程中,提交了不合法的数据,而数据库无法识别则会报错。也就是一切输入都是有害的。 注入类型有6种,可以参考SQLMAP,报错、盲注、联合、时间、内联、堆叠 注入提交方式:GET、POST、Cookies、文件头 利用方式:具体看什么数据库类型,像SQLSERVER可以命令执行,MYSQL写shell有些权限大也可以执行命令但是条件是在lINUX环境下。 防范:边界,CDN -> 脚本语言过滤 -> 数据库过滤最小权限 -> 主机
- 为什么有的时候没有错误回显
答: 没有进行错误打印或者错误屏蔽
- 宽字符注入的原理?如何利用宽字符注入漏洞,payload如何构造?
答: 在mysql中使用了gbk编码,占用2个字节,而mysql的一种特性,GBK是多字节编码,它认为两个字节就代表一个汉字,所以%df时候会和转义符\ %5c进行结合,所以单引号就逃逸了出来,当第一个字节的ascii码大于128,就可以了。
- CRLF注入的原理
答: CRLF注入在OWASP 里面被称为HTTP拆分攻击(HTTP Splitting)CRLF是”回车 + 换行”(\r\n)的简称,在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP 内容并显示出来。所以,一旦我们能够控制HTTP 消息头中的字符,注入一些恶意的换行。
- mysql的网站注入,5.0以上和5.0以下有什么区别?
答: 5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。 5.0以下是多用户单操作,5.0以上是多用户多操做。
- php.ini可以设置哪些安全特性
答: 禁用PHP函数 允许include或打开访问远程资源
- php的%00截断的原理是什么?
答: 因为在C语言中字符串的结束标识符%00是结束符号,而PHP就是C写的,所以继承了C的特性,所以判断为%00是结束符号不会继续往后执行 条件:PHP<5.3.29,且GPC关闭
- webshell检测,有哪些方法
答: grep、关键词、关键函数 安全狗、D盾
- php的LFI,本地包含漏洞原理是什么?写一段带有漏洞的代码。手工的话如何发掘?如果无报错回显,你是怎么遍历文件的?
答: if ($_GET'file'){ include $_GET'file'; } 包含的文件设置为变量,并且无过滤导致可以调用恶意文件 还可以对远程文件包含,但需要开启allow_url_include = ON 通过测试参数的地方进行本地文件/etc/passwd等包含 如何存在漏洞而且没有回显,有可能没有显示在页面而是在网页源代码中,除些可以利用DNSlog进行获取包含的信息。从index.php文件一级级往读取 也可以利用PHP封装协议读取文件。
- 说说常见的中间件解析漏洞利用方式
答: IIS 6.0 /xx.asp/xx.jpg "xx.asp"是文件夹名 IIS 7.0/7.5 默认Fast-CGI开启,直接在url中图片地址后面输入/1.php,会把正常图片当成php解析 Nginx 版本小于等于0.8.37,利用方法和IIS 7.0/7.5一样,Fast-CGI关闭情况下也可利用。 空字节代码 xxx.jpg%00.php Apache 上传的文件命名为:test.php.x1.x2.x3,Apache是从右往左判断后缀。
- Windows、Linux、数据库的加固降权思路,任选其一
答: 禁用root 禁止远程访问 禁止写入 单独帐号 禁止执行system等函数
- 如何绕过CDN获取目标网站真实IP,谈谈你的思路?
答: 类似phpinfo、网站信息 C段、子域名 历史解析记录 DDOS zmap全网扫描识别http头 网站域名管理员邮箱,注册过的域名等相关信息关联
- 应急响应的步骤
答: (1)准备已经编译好的工具以及取证分析等工具干净可靠放U盘 (2)初步判断事件的类型,是被入侵、ddos还是其它的原因 (3)首先抑制范围、影响范围,隔离使受害面不继续扩大。 (4)寻找原因,封堵攻击源。 (5)把业务恢复至正常水平 (6)监控有无异常,报告、管理环节的自省和改进措施。
- 有哪些反向代理工具
答: reGeirg、EW、lcx、Ngrok、frp
- CSRF 和 XSS 和 XXE 有什么区别,以及修复方式?
答: XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。 CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。
- CSRF、SSRF和重放攻击有什么区别
答: CSRF是跨站请求伪造攻击,由客户端发起 SSRF是服务器端请求伪造,由服务器发起 重放攻击是将截获的数据包进行重放,达到身份认证等目的
- 说出至少三种业务逻辑漏洞,以及修复方式
答: 密码找回漏洞中存在: (1)密码允许暴力破解、 (2)存在通用型找回凭证、 (3)可以跳过验证步骤、 (4)找回凭证可以拦包获取 等方式来通过厂商提供的密码找回功能来得到密码。 身份认证漏洞中最常见的是: (1)会话固定攻击 (2)Cookie 仿冒 只要得到 Session 或 Cookie 即可伪造用户身份。 验证码漏洞中存在: (1)验证码允许暴力破解 (2)验证码可以通过 Javascript 或者改包的方法来进行绕过。
- SQL注入有哪几种类型
答: (1)报错注入 (2)bool类型注入 (3)延时注入 (4)宽字节注入
- 盲注与延时注入共同点是什么
答: 都是一个字符一个字符的进行判断
- OWASP漏洞都有哪些
答: (1)SQL注入防护方法: (2)失效的身份认证和会话管理 (3)跨站脚本攻击XSS (4)直接引用不安全的对象 (5)安全配置错误 (6)敏感信息泄露 (7)缺少功能级的访问控制 (8)跨站请求伪造CSRF (9)使用含有已知漏洞的组件 (10)未验证的重定向和转发
- SQL注入防护方法
答: (1)使用安全的API (2)对输入的特殊字符进行Escape转义处理 (3)使用白名单来规范化输入验证方法 (4)对客户端输入进行控制,不允许输入SQL注入相关的特殊字符 (5)服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除
- 为什么aspx木马权限比asp大
答: aspx使用的是.net技术。IIS 中默认不支持,ASP只是脚本语言而已。入侵的时候asp的木马一般是guest权限…APSX的木马一般是users权限。
- CSRF原理,防御方法是什么
答: CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在关键操作执行时进行是否由用户自愿发起的确认 防御方法: 验证Referer 添加token
- token和referer做横向对比,谁安全等级高
答: token安全等级更高,因为并不是任何服务器都可以取得referer,如果从HTTPS跳到HTTP,也不会发送referer。并且FLASH一些版本中可以自定义referer。但是token的话,要保证其足够随机且不可泄露。(不可预测性原则)
- 对referer的验证,从什么角度去做?如果做,怎么杜绝问题
答: 对header中的referer的验证,一个是空referer,一个是referer过滤或者检测不完善。为了杜绝这种问题,在验证的白名单中,正则规则应当写完善。
- 针对token,对token测试会注意哪些方面
答: 引用一段请教前辈的回答: 针对token的攻击,一是对它本身的攻击,重放测试一次性、分析加密规则、校验方式是否正确等,二是结合信息泄露漏洞对它的获取,结合着发起组合攻击信息泄露有可能是缓存、日志、get,也有可能是利用跨站很多跳转登录的都依赖token,有一个跳转漏洞加反射型跨站就可以组合成登录劫持了另外也可以结合着其它业务来描述token的安全性及设计不好怎么被绕过比如抢红包业务之类的。