web安全详解(渗透测试基础)[通俗易懂]

大家好,又见面了,我是你们的朋友全栈君。

文章目录

  • 一、Web基础知识
    • 1.http协议
    • 2.网络三种架构及特点
    • 3. Web应用的特点
    • 4.URL组成
    • 6.Http协议的性质
    • 7.请求响应报文的格式
    • 8.请求方法
    • 9.http缓存
    • 10.缓存新鲜度如何判断
    • 11.Http重定向原理以及状态码
    • 12.HTTPS协议 数字证书
    • 13.HTTPS协议与HTTP协议的区别?
    • 14. Web客户端的作用
    • 15.Web服务端作用
    • 16.集群环境的作用
    • 17.什么是Cookie,Cookie的作用。
    • 18.Cookie 的类型
    • 19.session的作用和原理
      • Session的原理
      • Session的两种实现方式(也就是传递方式)
      • Session 与Cookie的区别
    • 20. Token的原理
    • 21.数据的编码方式
    • 22.Web测试的类型
    • 23.H5优点
    • 24. APP测试/Web测试/H5测试的区别
      • 相同之处
      • 不同之处
    • 25.移动端常用的三种开发模式
  • 二、探索式测试
  • 三、敏捷测试方法
    • 3.1 瀑布模型和敏捷模型比较
    • 3.2 Scrum框架包括3个角色、3个工件、5个事件、5个价值
    • 3.3 用户故事包含三个要素
    • 3.4 用户故事的特性
    • 3.5用户故事的优先级
    • 3.6 看板的作用
    • 3.7 什么是devops
    • 3.8 测试左移 和 测试右移
      • 测试左移
      • 测试右移
  • 四、web安全
    • 4.1 渗透测试主要做什么?
    • 4.2 渗透测试的流程
    • 4.3 信息收集的内容
    • 4.4 同源策略概念及意义
    • 4.5 浏览器沙箱
    • 4.6 恶意网址拦截机制
    • 4.7 XSS攻击的原理
    • 4.8 xss三种类型
    • 4.9 XSS漏洞防范
    • 4.10 什么是sql注入?
    • 4.11 sql注入的类型?
    • 4.12 盲注的类型?
    • 4.13 什么是文件包含漏洞?
    • 4.14 利用文件包含漏洞满足下面两个条件?
    • 4.15 文件包含漏洞预防
    • 4.16 文件上传检测的内容?
    • 4.17 防范文件上传漏洞常见方法?
    • 4.18 什么是点击劫持?
    • 4.19 CSRF原理?
    • 4.20 CSRF的防御?
    • 4.21 HTML5安全问题?
    • 4.22 session的攻击方式?
    • 4.23 单点登录
    • 4.24 基于角色的访问控制和基于数据的访问控制
    • 4.25 OAuth 2.0 原理
    • 4.26 四种授权方式
    • 4.23 单点登录
    • 4.24 基于角色的访问控制和基于数据的访问控制
    • 4.25 OAuth 2.0 原理
    • 4.26 四种授权方式

一、Web基础知识

1.http协议

​ 超文本传输协议是互联网上应用最广泛的一种网络协议。所有www文件都必须遵守的一个标准,是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范,简单点说就是一种固定的通讯规则。

2.网络三种架构及特点

网络应用程序架构包括三种: 客户机/服务器结构(C/S) 浏览器/服务器结构(B/S) P2P结构

C/S架构

  1. 需要安装特定的客户端程序
  2. 针对不同平台开发不同版本
  3. 升级应用需重新安装
  4. 能够直接使用客户端硬件资源

B/S架构

  1. 客户端无需安装,有Web浏览器即可
  2. 跨平台能力
  3. 无缝升级,客户端免维护

P2P架构 点到点系统,不需要服务器中转,客户端与客户端彼此直接通信

3. Web应用的特点

  1. 应用是图形化和易于导航的,能够在页面显示色彩丰富的图形和文本。
  2. 应用与平台无关,可以使用任何平台通过internet访问。
  3. Web应用是分布式的,不同的信息可以放在不同的站点上。
  4. Web应用是动态的,web站点的信息包含站点本身的信息,信息的提供者也可以对网站的信息进行更新。

4.URL组成

Protocol:指定使用的传输协议 hostname:主机名 port:端口号 path:路径 parameters:参数

query:可选,用于给动态网页传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

fragment:信息片段,字符串,用于指定网络资源中的片断。

6.Http协议的性质

  1. HTTP是简单的
  2. HTTP是可扩展的
  3. HTTP是无状态,有会话的
  4. HTTP是可靠的

7.请求响应报文的格式

HTTP请求报文分为三部分

  1. 请求行 请求方法、URL、协议版本等(消息报头)
  2. 请求头 由一个头域名、冒号和值域组成
  3. 请求体

响应

  1. 响应行 协议和状态码 状态码分类
  2. 响应头
  3. 响应体

8.请求方法

GET POST OPTIONS HEAD PUT DELETE TRACE CONNECT

9.http缓存

代码语言:javascript
复制
缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。这样带来的好处有:缓解服务器端压力,提升性能(获取资源的耗时更短了)。

10.缓存新鲜度如何判断

Web服务器通过2种方式来判断浏览器缓存是否是最新的 1、 Last-Modified和If-Modified-Since 2、 ETags和If-None-Match

11.Http重定向原理以及状态码

代码语言:javascript
复制
在 HTTP 协议中,重定向操作由服务器通过发送特殊的响应(即 redirects)而触发。HTTP 协议的重定向响应的状态码为 3xx 。浏览器在接收到重定向响应的时候,会采用该响应提供的新的 URL ,并立即进行加载;大多数情况下,除了会有一小部分性能损失之外,重定向操作对于用户来说是不可见的。

1XX 指示信息 2XX 请求发送成功 3XX 重定向 4XX 客户端发送的请求有语法错误 5XX 服务器错误

12.HTTPS协议 数字证书

代码语言:javascript
复制
	HTTPS协议是以安全为目标的HTTP通道,其实就是HTTP的升级版本
数字证书:是由权威的CA(Certificate Authority)机构给服务端进行颁发,CA机构通过服务端提供的相关信息生成证书,证书内容包含了持有人的相关信息,服务器的公钥,签署者签名信息(数字签名)等,最重要的是公钥在数字证书中。</code></pre></div></div><p>​</p><h3 id="7b3j" name="13.HTTPS%E5%8D%8F%E8%AE%AE%E4%B8%8EHTTP%E5%8D%8F%E8%AE%AE%E7%9A%84%E5%8C%BA%E5%88%AB%EF%BC%9F">13.HTTPS协议与HTTP协议的区别?</h3><ol class="ol-level-0"><li>HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。</li><li>HTTP采用80端口连接,而HTTPS则是443端口。</li><li>HTTPS协议需要到ca申请证书,一般免费证书很少,需要交费,也有些web容器提供,如TOMCAT。HTTP协议不需要。</li></ol><h3 id="bk9jq" name="14.-Web%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E4%BD%9C%E7%94%A8">14. Web客户端的作用</h3><ol class="ol-level-0"><li>用来发送HTTP请求</li><li>接收服务器响应</li><li>把服务器返回的HTML代码渲染成界面Web客户端来主要是浏览器。</li></ol><h3 id="ld2p" name="15.Web%E6%9C%8D%E5%8A%A1%E7%AB%AF%E4%BD%9C%E7%94%A8">15.Web服务端作用</h3><ol class="ol-level-0"><li>监听客户请求</li><li>处理客户端的简单请求(一般静态页面)</li><li>客户端与数据库之间的屏障</li><li>处理复杂系统的业务和数据库的访问</li></ol><h3 id="8ss8m" name="16.%E9%9B%86%E7%BE%A4%E7%8E%AF%E5%A2%83%E7%9A%84%E4%BD%9C%E7%94%A8">16.集群环境的作用</h3><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">	集群环境:服务器集群是指将很多服务器集中起来去进行同一种服务。集群可以利用多个计算机并行计算从而获得很高的计算速度(负载均衡),也可以用多个计算机做备份,从而使得实现故障转移。</code></pre></div></div><h3 id="bd86q" name="17.%E4%BB%80%E4%B9%88%E6%98%AFCookie%EF%BC%8CCookie%E7%9A%84%E4%BD%9C%E7%94%A8%E3%80%82">17.什么是Cookie,Cookie的作用。</h3><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">Cookie: Cookie实际上是一小段的文本信息(key-value格式)。

客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

18.Cookie 的类型

  1. 会话Cookie:保存在内存中,由浏览器维护,浏览器关闭后消失。
  2. 持久性Cookie:保存在硬盘里,有过期时间,用户手动清理或到了过期时间,持久性Cookie会被删除。

Expires属性:Cookie中的maxAge用来表示该属性,单位为秒。

19.session的作用和原理

代码语言:javascript
复制
在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

Session的原理

  1. 用户第一次请求服务器时,服务器端会生成一个sessionId
  2. 服务器端将生成的sessionId返回给客户端,通过set-cookie
  3. 客户端收到sessionId会将它保存在Cookie中,当客户端再次访问服务端时会带上这个sessionId
  4. 当服务端再次接收到来自客户端的请求时,会先去检查是否存在sessionId,不存在就新建一个sessionId重复1,2的流程,如果存在就去遍历服务端的session文件,找到与这个sessionId相对应的文件,文件中的键值便是sessionId,值为当前用户的一些信息
  5. 此后的请求都会交换这个 sessionId ,进行有状态的会话

Session的两种实现方式(也就是传递方式)

  1. 通过Cookie实现
  2. 通过URL重写来实现

Session 与Cookie的区别

  1. Cookie的数据保存在客户端浏览器,Session保存在服务器
  2. 服务端保存状态机制需要在客户端做标记,所以Session可能借助Cookie机制
  3. Cookie通常用于客户端保存用户的登录状态
  4. Session是可以存取任何类型的数据的,但是Cookie只能存入字符串
  5. Cookie存储数据大小有限制,Session没有限制

20. Token的原理

  1. 用户通过用户名和密码发送请求。
  2. 程序验证。
  3. 程序返回一个签名的token给客户端。
  4. 客户端储存token,并且每次用于每次发送请求。
  5. 服务端验证token并返回数据。

21.数据的编码方式

url编码是一种浏览器用来打包表单输入的格式。

Base64就是一种用64个ASCII字符来表示任意二进制数据的方法。

MD5 为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。目前不可逆解。

22.Web测试的类型

  1. 界面测试:导航测试、图形测试、内容测试、整体界面测试、界面控件测试
  2. 功能测试:
  3. 性能测试
  4. 兼容性测试
  5. 安全性测试等

23.H5优点

  1. 跨平台优势,H5页面在各个平台都适用,且可以在网页上直接进行调试和修改,开发和维护的成本较低,开发周期较短。
  2. 强化了Web网页的表现性能。除了可描绘二维图形外,还准备了用于播放视频和音频的标签。
  3. 追加了本地数据库等Web应用的功能。
  4. H5营销的数据统计方便

24. APP测试/Web测试/H5测试的区别

相同之处

代码语言:javascript
复制
针对同一个系统功能的测试,三端所测的业务流程是一样的

一般情况下手机端和PC端都对应一套后台服务,也有一些功能,比如PC与手机端展示不一致,或者有什么特殊处理,这样情况下后台会写两套不同的接口来处理对应的业务需求

不同之处

  1. 测试平台(容器)不同
  2. 兼容性测试不同
  3. 系统架构不一样
  4. 发布流程不同
  5. APP还有一些专项测试

25.移动端常用的三种开发模式

代码语言:javascript
复制
主要有原生APP(Native App)、混合APP(Hybrid App)、WEB APP三种.

二、探索式测试

  1. 传递测试法:看数据

  2. 测一送一: 同时执行两种同样的操作。
  3. 遍历测试法: 测试弹窗,测试所有弹窗。
  4. 破坏测试法:比如网络或者内存。(前四种主要是全局的)

三、敏捷测试方法

3.1 瀑布模型和敏捷模型比较

顺序(瀑布模型):简单,分阶段,阶段间存在因果关系,不支持用户参与,要求预先确定需求。 使用范围:需求易于完善定义且不易变更的软件系统。

敏捷(迭代):不要求需求预先完备定义,支持用户参与,支持需求的渐进式完善和确认,能够适应用户需求的变化。 使用范围:需求复杂、难以确定、动态变化的软件系统

3.2 Scrum框架包括3个角色、3个工件、5个事件、5个价值

3个角色:产品负责人 ScrumMaster 开发团队

3个工件 产品Backlog SprintBacklog 产品增量

5个事件 Sprint(Sprint本身是一个事件,包括了如下4个事件) Sprint计划会议 每日站会 Sprint评审会议 Sprint回顾会议

5个价值 承诺 – 愿意对目标做出承诺 专注– 把你的心思和能力都用到你承诺的工作上去 开放– Scrum 把项目中的一切开放给每个人看 尊重– 每个人都有他独特的背景和经验 勇气– 有勇气做出承诺,履行承诺,接受别人的尊重

3.3 用户故事包含三个要素

  1. 角色(who) :谁要使用这个
  2. 活动(what) :要完成什么活动
  3. 价值(value) :为什么要这么做,这么做能带来什么价值

3.4 用户故事的特性

  1. 独立的
  2. 可讨论的
  3. 有价值的
  4. 可估算的
  5. 小的
  6. 可测试的

3.5用户故事的优先级

1.Must 2.Should 3.Could 4.Would Not

3.6 看板的作用

  1. 明确的阶段及准入准则。
  2. 每个阶段的任务数量,控制在制品<=4。
  3. 交付周期中的各个时间长度。
  4. 待交付价值已交付价值。
  5. 信息的可视化及变化通知。

3.7 什么是devops

:文化改变+自动化工具=不断变化的市场。也是开发模式:敏捷+自动化工具

3.8 测试左移 和 测试右移

测试左移

  1. 评审
  2. 技术对齐
  3. 自测赋能
  4. 多角色协作

测试右移

  1. 灰度
  2. 监控
  3. 问题归因

四、web安全

4.1 渗透测试主要做什么?

代码语言:javascript
复制
通过实际的攻击进行安全测试与评估的方法就是渗透测试

4.2 渗透测试的流程

  1. 明确目标
  2. 信息收集
  3. 漏洞探测
  4. 漏洞验证
  5. 编写报告
  6. 信息整理与分析

4.3 信息收集的内容

  1. 域名信息
  2. 敏感目录
  3. 端口扫描
  4. 旁站C段
  5. 整站分析

4.4 同源策略概念及意义

概念:两个页面地址中的协议域名(或IP)子域名端口号一致,则表示同源

意义:限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性

4.5 浏览器沙箱

沙箱(Sandbox):泛指“资源隔离类模块”的代名词

设计沙箱的目的:

  1. 让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源
  2. 如果一定要跨越沙箱边界产生数据交换,则只能通过指定的数据通道,比如经过封装的API来完成,在这些API中会严格检查请求的合法性

4.6 恶意网址拦截机制

浏览器周期性地从服务器端获取一份最新的恶意网址黑名单,如果用户上网访问的网址存在于此黑名单中,浏览器就会弹出一个警告页面

4.7 XSS攻击的原理

攻击者可以在之间输入JavaScript代码,实现一些“特殊效果” 在真实的攻击中,攻击者不仅仅弹出一个框,通常使用

方式来加载外部脚本,

而在x.txt中就存放着攻击者的恶意JavaScript代码,这段代码可能是 用来盗取用户的Cookie,也可能是监控键盘记录等恶意行为

4.8 xss三种类型

反射型:将恶意代码附着在参数中实例,

储存型:当用户提交一段XSS代码后,被服务器端接收并存储,当攻击者再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器

DOM:通过JavaScript修改页面的DOM节点形成的XSS

4.9 XSS漏洞防范

  1. 过滤 html
  2. PHP输出到JS代码中,或者开发Json API的,则需要前端在JS中进行过滤
  3. 在设置Cookie时,加上HttpOnly参数

4.10 什么是sql注入?

SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令

4.11 sql注入的类型?

  1. 字符型注入
  2. 数字型注入
  3. 盲注
  4. 联合注入

4.12 盲注的类型?

  1. 布尔盲注
  2. 时间盲注

4.13 什么是文件包含漏洞?

开发人员为了增加代码的灵活性,通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。PHP、JSP、ASP等语言中都可能会有文件包含漏洞,但PHP中居多。

4.14 利用文件包含漏洞满足下面两个条件?

  1. Include()等函数通过动态变量的方式引入需要包含的文件;
  2. 用户能够控制该动态变量

4.15 文件包含漏洞预防

  1. 严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;
  2. 路径限制:限制被包含的文件只能在某一文件夹内, 一定要禁止目录跳转字符,如“…/”;
  3. 包含文件验证:验证被包含的文件是否是白名单中的一员;
  4. 尽量不要使用动态包含,可以在需要包含的页面固定写好,如: include(“head.php”);.

4.16 文件上传检测的内容?

  1. 客户端检测:客户端使用JS检测,在文件未上传时,就对文件进行验证
  2. 服务器端检测:检测文件扩展名是否合法,检测文件中是否嵌入恶意代码

4.17 防范文件上传漏洞常见方法?

  1. 文件上传的目录设置为不可执行
  2. 判断文件类型
  3. 使用随机数改写文件名和文件路径
  4. 单独设置文件服务器的域名

4.18 什么是点击劫持?

代码语言:javascript
复制
攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

4.19 CSRF原理?

是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

4.20 CSRF的防御?

  1. 验证 HTTP Referer 字段
  2. 二次确认输入验证码
  3. Token认证,使用Token防御CSRF
  4. Cookie Hashing

4.21 HTML5安全问题?

  1. CORS攻击
  2. Web Storage攻击
  3. Web Worker攻击
  4. 新标签攻击

4.22 session的攻击方式?

  1. 会话固定攻击

利用应用系统在服务器的会话ID固定不变机制,借助他人用相同的会话ID获取认证和授权,然后利用该会话ID劫持他人的会话以成功冒充他人,造成会话固定攻击。

  1. Session保持攻击

Session是有生命周期的,攻击者持有一个有效的Session,若Session一直未能失效,则攻击就通过此有效的Session一直使用用户的账户,成为一个永久的“后门”。

4.23 单点登录

简称SSO。在多个应用系统中,只需要登录一次,就可以访问其他所有的应用系统。

4.24 基于角色的访问控制和基于数据的访问控制

基于角色的访问控制:访问控制实际上是建立用户与权限之间的对应关系 由于水平权限管理是系统缺乏一个数据级的访问控制所造成的

4.25 OAuth 2.0 原理

OAuth引入了一个授权环节来解决上述问题。第三方应用请求访问受保护资源时,资源服务器在获准资源用户授权后,会向第三方应用颁发一个访问令牌(AccessToken)。该访问令牌包含资源用户的授权访问范围、授权有效期等关键属性。第三方应用在后续资源访问过程中需要一直持有该令牌,直到用户主动结束该次授权或者令牌自动过期。

4.26 四种授权方式

  1. 授权码
  2. 隐藏式
  3. 密码式
  4. 客户端凭证 n一直未能失效,则攻击就通过此有效的Session一直使用用户的账户,成为一个永久的“后门”。

4.23 单点登录

简称SSO。在多个应用系统中,只需要登录一次,就可以访问其他所有的应用系统。

4.24 基于角色的访问控制和基于数据的访问控制

基于角色的访问控制:访问控制实际上是建立用户与权限之间的对应关系 由于水平权限管理是系统缺乏一个数据级的访问控制所造成的

4.25 OAuth 2.0 原理

OAuth引入了一个授权环节来解决上述问题。第三方应用请求访问受保护资源时,资源服务器在获准资源用户授权后,会向第三方应用颁发一个访问令牌(AccessToken)。该访问令牌包含资源用户的授权访问范围、授权有效期等关键属性。第三方应用在后续资源访问过程中需要一直持有该令牌,直到用户主动结束该次授权或者令牌自动过期。

4.26 四种授权方式

  1. 授权码
  2. 隐藏式
  3. 密码式
  4. 客户端凭证

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151134.html原文链接:https://javaforall.cn