软件测试10 渗透性测试及验收测试


渗透性测试及验收测试

知识回顾

Web UI自动化测试
  • 引入自动化测试需要满足的条件
  • 自动化测试流程简述
  • 自动化测试的关键技术
  • Selenium页面元素定位方式
目标
  • 了解安全测试的概念
  • 了解常见的安全漏洞
  • 了解安全测试流程及测试工具的使用
  • 理解验收测试的概念
  • 掌握Alpha测试和Beta测试方法
重点/难点
  • 重点:常见的安全测试漏洞;Alpha测试和Beta测试方法
  • 难点:常见安全漏洞的攻击原理;Alpha测试和Beta测试方法

安全测试概述

什么是安全测试?

  • 安全测试是在IT软件产品的生命周期中,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。
    安全测试贯穿于软件的整个生命周期。
    在这里插入图片描述

安全测试与常规测试的区别

  1. 测试目标不同:普通测试以发现Bug为目标;安全测试以发现安全隐患为目标。
  2. 假设条件不同:普通测试假设数据是用户不小心造成的;安全测试假设数据是攻击者构造的。
  3. 思考域不同:普通测试关注系统功能;安全测试包括系统功能、机制、外部环境等。
  4. 问题发现模式不同:普通测试基于功能违反;安全测试基于权限与能力违反。

常见安全漏洞

SQL注入漏洞

  • SQL注入是Web层最高危的漏洞之一,由输入未过滤导致。
    数据库注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行过滤或者过滤不足,使得攻击者可以通过合法的输入点提交一些精心构造的语句来欺骗后台数据库执行,导致数据库信息泄露的一种漏洞。
    应用程序的登录模块,程序需要获取前端所输入的账号和密码,拼接SQL语句在数据库中进行查询,登录查询代码如下:
    在这里插入图片描述
    在这里插入图片描述
    当输入正确的用户名test和密码123456后,程序会构建一个包含SQL语句的字符串sql,代码如下:

在这里插入图片描述
最终提交给数据库服务器运行的SQL语句如下:
在这里插入图片描述
如果存在此用户并且密码正确,数据库将返回记录数≥1,则用户认证通过,登录成功。
如果使用一个如下所示的比较特殊的用户账号信息来登录,在输入用户名和密码后单击“登录”按钮,也可以正常登录
在这里插入图片描述
在这里插入图片描述
但是,数据库中只有test用户,根本没有haha’or 1=1–用户,那为什么这个非法用户可以登录成功呢?
当输入特殊用户名haha’or 1=1–时,最终构成的命令如下:
在这里插入图片描述
在这里插入图片描述
最终提交给数据库服务器运行的SQL语句如下:
select count(*) from users where name= ‘haha’ or 1=1 – 'and password = ‘123456’
SQL中–符号是注释符号,其后的内容均为注释,即命令中–符号后的’and password = '123456’均为注释,那么password的值在查询时也根本起不了任何作用。而where后的name= ‘haha’ or 1=1这条语句永远为真,所以最终执行的SQL语句相当于:
在这里插入图片描述

SQL注入漏洞会带来以下几种常见的后果:

  1. 信息泄漏
    – 注入SECLECT语句。
  2. 篡改数据
    – 注入INSERT语句。
    – 注入UPDATE语句。
    – 注入ALTER USER语句。
    – 注入ALERT TABLE语句。
  3. 特权提升
    – 注入EXEC语句。
  4. 破坏系统
    – 注入DELETE语句。
    – 注入DROP TABLE语句。
    – 注入SHUTDOWN语句。

SQL注入漏洞攻击流程

  1. 寻找注入点
    – 手工方式:手工构造SQL语句进行注入点发现。
    – 自动方式:使用Web漏洞扫描工具,自动进行注入点发现。
  2. 信息获取
    – 环境信息:数据库类型、版本、操作系统版本、用户信息等。
    – 数据库信息:数据库名称、数据库表、表字段、字段内容等。
  3. 获取权限
    – 获取操作系统权限:通过数据库执行shell,上传木马。

注入点类型

  • 数字型注入:当输入的参数为整型时,如ID、年龄、页码等,如果存在注入漏洞则可以认为是数字型注入。数字型注入是最简单的一种注入。
  • 字符型注入:当输入参数为字符串时,如果存在注入漏洞则称为字符型注入。字符串类型一般要使用单引号来闭合。例如:
    字符型注入:select * from table where username=‘admin’
    字符型注入最关键的是如何闭合SQL语句以及注释多余的代码。下面以select查询命令和update更新命令为例说明。

SQL注入的防范措施

  • 数据库部分:不允许直接拼接SQL语句,使用参数化查询等。
    – 不允许在代码中出现直接拼接SQL语句的情况。
    – 存储过程中不允许出现:exec、exec sp_executesql。
    – 使用参数化查询的方式来创建SQL语句。
    – 对参数进行关键字过滤,如表所示。
    – 对关键字进行转义。
  • 前端页面部分:限定输入长度和类型。
  • 在代码审查中查找SQL注入漏洞:代码审查时,注意查找程序代码中的SQL注入漏洞

XSS跨站脚本漏洞

XSS原理解析

  • JavaScript可用来获取用户Cookie、改变网页内容等。存在XSS漏洞的网站,就可能会被盗取用户Cookie,、黑掉页面、导航到恶意网站等,而攻击者需要做的仅仅是利用网页开发时留下的漏洞,通过巧妙的方法向Web页面中注入恶意JavaScript代码。
    在这里插入图片描述
    下面是一段简单的XSS漏洞实例,其代码功能是接收用户在Index.html页面中提交的数据,再将数据显示在PrintStr页面。
    Index.html 页面代码如:
    在这里插入图片描述
    PrintStr页面代码如下:
    在这里插入图片描述
    当攻击者输入

XSS类型

  • 反射型XSS:非持久性,服务器处理后反射回浏览器。当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。
    – 下面举例说明反射型XSS跨站漏洞。
    在这里插入图片描述
    在这段代码中,程序先接收username值再将其输出,如果恶意用户输入username = ,将会造成反射型XSS漏洞。

  • 存储型XSS:持久性,XSS代码被服务器存储后响应给浏览器。允许用户存储数据的Web应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储。当攻击者再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这种攻击就是存储型XSS。
    – 在测试是否存在XSS时,首先要确定输入点与输出点,例如,若要在留言内容上测试XSS漏洞,首先就要去寻找留言内容输出(显示)的地方是在标签内还是在标签属性内,或者在其他什么地方,如果输出的数据在标签属性内,那么XSS代码是不会被执行的。如:
    在这里插入图片描述
    JavaScript代码虽然成功地插入到了HTML中,但却无法执行,因为XSS代码出现在Value属性中,被当作值来处理,最终浏览器解析HTML时,将会把数据以文本的形式输出在网页中。
    确定了输出点之后,就可以根据相应的标签构造HTML代码来闭合。插入下面的XSS代码到上面的代码中:
    在这里插入图片描述
    最终在HTML文档中代码变为:
    在这里插入图片描述

  • DOM型XSS:是一种跨站脚本攻击,它与反射型和存储型XSS不同,因为它的XSS代码不是由服务器发送给浏览器,而是浏览器自身在处理页面时,由于JavaScript代码的不当操作导致恶意脚本执行。
DOM型XSS的特点:
  1. 基于文档对象模型(DOM):攻击者利用DOM结构中的漏洞,通过JavaScript动态修改页面内容。
  2. 不需要服务器参与:与反射型和存储型XSS不同,DOM型XSS的恶意脚本是在客户端浏览器执行,不需要服务器的参与。
  3. 攻击隐蔽性高:由于攻击代码是在客户端执行,因此很难被服务器端的安全措施检测到。
DOM型XSS的攻击流程:
  1. 寻找DOM操作点:攻击者寻找页面中通过JavaScript动态生成内容的地方。
  2. 构造恶意输入:攻击者构造特殊的输入,这些输入在页面的DOM处理过程中被错误地作为代码执行。
  3. 触发执行:当页面处理这些输入时,恶意的JavaScript代码被执行。
防范措施:
  1. 对输入进行严格的验证和过滤:确保所有用户输入都被当作不可信数据处理,进行适当的HTML编码或JavaScript转义。
  2. 使用HTTP头部内容策略:通过设置HTTP头部的Content-Security-Policy,限制可以执行的脚本源。
  3. 最小化DOM操作:减少直接操作DOM的JavaScript代码,使用更安全的框架或库来处理DOM。
  4. 使用安全的API:避免使用可能引起安全问题的API,如innerHTML,改用textContent或创建元素的方式。
  5. 对输出进行编码:在将数据插入到DOM之前,对数据进行HTML编码,防止脚本被执行。

查找XSS漏洞的过程

  1. 找到输入点。比如查询接口、留言板等。
  2. 输入“唯一”字符,定位源码。
  3. 结合语法构造script,闭合HTML标签。
  4. 提交script,验证执行情况。如果成功执行则说明存在XSS漏洞。

XSS过滤方法

  • XSS跨站漏洞最终形成的原因是对输入与输出没有严格过滤、在页面执行Java Script等客户端脚本,如果要防御XSS就意味着只要将敏感字符过滤,即可修补XSS跨站漏洞。
  • 通用处理:检查过滤输入内容,对存在跨站漏洞的页面参数的输入内容进行检查、过滤。例如对 [ %!~@#$^*()=|{}\<>/? ]等符号的输入进行检查过滤,对输出进行编码。
  • 使用XSS防护框架:如ESAPI、ANTIXSS。

渗透测试

原理

  • 渗透测试是利用模拟黑客攻击的方式,评估计算机网络系统安全性能的一种方法。这个过程是站在攻击者角度对系统的任何弱点、技术缺陷或漏洞的主动分析,并且有条件地主动利用安全漏洞。

渗透测试特点

  • 渐进深入的过程。
  • 选择不影响业务系统的攻击方法。

渗透测试流程

在这里插入图片描述


验收测试

验收测试的概念

  • 部署软件前最后一个测试操作,确保软件准备就绪。,并且可以让最终用户将其用于执行软件的既定功能和任务。

验收测试的常用策略

  • 正式验收测试
  • Alpha测试(非正式验收测试)
  • Beta测试

验收测试的类别

  • 用户验收测试:确认应用满足业务需求。,并在将软件正式交付给最终用户之前,确保系统正常工作并可以使用。
  • 操作验收测试:确认应用满足操作需求。并确保系统正式工作并可以使用。操作验收测试在测试组的协助下由一个或多个操作代表执行的。
  • 两者不同之处——操作验收测试是用于验证被测应用在操作和管理方面的情况(例如更新后的被测应用的安装,对被测应用极其数据的备份、归档和恢复以及注册新用户并为其分配权限)。

正式验收测试

  • 管理严格的过程,系统测试的延续。计划和设计这些测试的周密和详细程度不亚于系统测试。选择的测试用例应当是系统测试中所执行测试用例的子集,并且不应当偏离所选择的测试用例方向。
  • 正式验收测试主要有两种方式:
    (1)在某些组织中,开发组织(或其独立的测试小组)与最终用户组织的代表一起执行验收测试。
    (2)在其他组织中,验收测试则完全由最终用户组织执行,或者由最终用户组织选择人员组成一个客观公正的小组来执行。

验收测试方法

  1. 软件需求分析:了解软件功能和性能要求、软硬件环境要求等,并特别要了解软件的质量要求和验收要求。
  2. 编制测试计划和验收准则:根据软件需求和验收要求编制测试计划,制定所需测试的测试项,制定测试策略及验收通过准则,并由客户参与计划评审。
  3. 测试设计和测试用例设计:根据《验收测试计划》和《项目验收准则》编写测试用例,并经过评审。
  4. 测试环境搭建:测试环境搭建:建立测试的硬件环境、软件环境等。
  5. 测试实施:测试实施:测试并记录测试结果。
  6. 测试结果分析:测试结果分析:根据验收通过准则分析测试结果,给出验收是否通过和测试评价。
  7. 测试报告:根据测试结果编制缺陷报告和验收测试报告,并提交给客户。

Alpha测试与Beta测试

  • Alpha测试:内部人员模拟用户测试α版本。
  • Beta测试:典型用户实际使用β版本,报告异常。

Beta测试的前提条件

  • 目标市场:测试参与者应是目标市场的一部分。才能对产品的质量、功能和设计进行客观地评价。
  • 可使用的测试产品:产品应进行可用性评估。如果一个产品处于很难使用的状态,那么测试除了证实该产品有问题外,就没有其他意义了。
  • 要求测试结果:公司应获取客户反馈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【React 】开发环境搭建详细指南

文章目录 一、准备工作1. 安装 Node.js 和 npm2. 选择代码编辑器 二、创建 React 项目1. 使用 Create React App2. 手动配置 React 项目 三、集成开发工具1. ESLint 和 Prettier2. 使用 Git 进行版本控制 在现代前端开发中&#xff0c;React 是一个非常流行的框架&#xff0c;用…

【计算机毕业设计】866校企合作管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Git处理Failed to connect to www.google.com port 80: Timed out

Git处理Failed to connect to www.google.com port 80: Timed out 输入提交代码命令&#xff1a;git push -u origin master 报错&#xff1a;fatal: unable to access https://gitee.com/solitudeYu/gerenzhuye.git/: Failed to connect to www.google.com port 80: Timed ou…

AI数字人+城市交通大数据可视化平台,让交通管理与服务更简便、更智能

如今&#xff0c;AI数字人作为科技革命和产业革命的重要驱动力&#xff0c;AI数字人接入城市交通大数据可视化平台&#xff0c;可以有效地将各硬件与业务系统进行深度融合&#xff0c;完成业务闭环。依托AI数字人的应用&#xff0c;使城市交通大数据可视化平台的使用复杂度大幅…

我在Vscode学Java泛型(泛型设计、擦除、通配符)

Java泛型 一、泛型 Generics的意义1.1 在没有泛型的时候&#xff0c;集合如何存储数据1.2 引入泛型的好处1.3 注意事项1.3.1 泛型不支持基本数据类型1.3.2 当泛型指定类型&#xff0c;传递数据时可传入该类及其子类类型1.3.3 如果不写泛型&#xff0c;类型默认是Object 二、泛型…

Elastic 数据分层策略:为弹性及高效的实施而优化

作者&#xff1a;来自 Elastic Michael Calizo, Tim Lee 在 Elastic&#xff0c;我们大多数成功的客户实施都是从单一用例开始的&#xff0c;旨在满足特定的业务需求。Elastic 最初被采用通常是因为开发人员欣赏它提供的功能。然而&#xff0c;由于其灵活性和可定制性&#xff…

Ubuntu安装QQ教程

Ubuntu安装QQ教程 腾讯更新Linux版的QQ&#xff0c;这里安装一下&#xff1b; 首先&#xff0c;进入官网找到合适对应的安装包&#xff1b; QQLinux版本官网&#xff1a;https://im.qq.com/linuxqq/index.shtml 我们是ubuntu系统选择X86下的deb版本&#xff0c;如果是arm开…

ROS参数服务器增删改查实操C++

ROS参数服务器增删改查实操C 创建功能包参数服务器新增&#xff08;修改&#xff09;参数参数服务器获取参数参数服务器删除参数 ROS通信机制包括话题通信、服务通信和参数服务器三种通信方式&#xff0c;各原理及代码实现如下表 功能博客链接说明VScode配置 ROS 环境VScode创建…

【Vue实战教程】之Vuex状态管理详解

Vuex状态管理 1 Vuex简介 1.1 什么是Vuex Vuex是一个专为Vue.js应用程序开发的状态管理工具。它采用了集中式存储管理应用的所有的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 简单来说&#xff0c;Vuex是一个适用于在Vue项目开发时使用的状态管理…

机器学习 | 回归算法原理——多项式回归

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的最速下降法&#xff08;梯度下降法&#xff09;继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享多项式回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目&#xff0c;…

Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习多输入单输出时间序列预测

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测) 模型设计 步骤1: 数据准备 收集和整理历史数据。确保数据集经过适当的预处理,如归一…

【人工智能】Transformers之Pipeline(五):深度估计(depth-estimation)

目录 一、引言 二、深度估计&#xff08;depth-estimation&#xff09; 2.1 概述 2.2 技术路径 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipeline&#xff08…

mysql JSON特性优化

有朋友问到&#xff0c;mysql如果要根据json中的某个属性过滤&#xff0c;数据量大的话&#xff0c;性能很差&#xff0c;要如何提高性能&#xff1f; 为什么要用json串&#xff1f; 由于一些特定场景&#xff0c;mysql需要用到json串&#xff0c;例如文档&#xff0c;不同的…

详解Stable Diffusion 原理图

参考英文文献&#xff1a;The Illustrated Stable Diffusion – Jay Alammar – Visualizing machine learning one concept at a time. 在这个Stable Diffusion模型的架构图中&#xff0c;VAE&#xff08;变分自编码器&#xff09;模型对应的是图中的 E 和 D 部分。 具体来说…

【BUG】已解决:NameError: name ‘python‘ is not defined

NameError: name ‘python‘ is not defined 目录 NameError: name ‘python‘ is not defined 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于…

深入学习STL标准模板库

C STL standard template libaray 标准模板库 目录 C STL standard template libaray 标准模板库 一、标准容器顺序容器vectordequelistvector deque list对比 容器适配器stackqueuepriority_queue 关联容器(1)无序关联容器unordered_setunordered_multisetunordered_mapunorde…

Cxx Primer-chap7

类的基本思想是数据抽象和封装&#xff0c;前者强调interface和implement分离&#xff0c;后者在此基础上&#xff0c;强调访问控制符&#xff08;存疑&#xff09;。同时类的实现者和使用者考虑的角度不同&#xff0c;前者考虑实现效率&#xff0c;后者仅需关注功能即可&#…

C++相关概念和易错语法(23)(set、仿函数的应用、pair、multiset)

1.set和map存在的意义 &#xff08;1&#xff09;set和map的底层都是二叉搜索树&#xff0c;可以达到快速排序&#xff08;当我们按照迭代器的顺序来遍历set和map&#xff0c;其实是按照中序来遍历的&#xff0c;是排过序的&#xff09;、去重、搜索的目的。 &#xff08;2&a…

与众不同的社交体验:Facebook的新功能与新变化

在快速变化的社交媒体领域&#xff0c;Facebook不断引入创新功能和变化&#xff0c;以满足用户日益增长的需求&#xff0c;并提供与众不同的社交体验。从增强现实到数据隐私&#xff0c;Facebook的新功能和更新正在塑造一个全新的社交平台。本文将深入探讨这些新功能和变化&…

arm环境下构建Flink的Docker镜像

准备工作 资源准备 按需下载 flink&#xff0c;我的是1.17.2版本。官方说1.13版本之后的安装包兼容了arm架构&#xff0c;所以直接下载就行。 如需要cdc组件&#xff0c;提前下载好。 服务器准备 可在某云上购买arm服务器&#xff0c;2c/4g即可&#xff0c;按量付费。 带宽…