《图解 HTTP》 阅读摘要(下)

简介: 这本 HTTP 方面的小册子还蛮不错,已经二刷了 😜这次做了一些笔记,方便自己和其他人翻阅和复习,因为这本书是 2014 年出的初版,所以有一些不怎么常用的技术,笔记中就省略了,只记一些比较常用的 ~如果希望获取本书的 PDF 资源,可以关注文末二维码加微信群找群主要~

8. 确认访问用户身份的认证


一些页面只想让特定的人浏览,这就引入了认证功能。


HTTP1.1 常用的认证方式:


  1. BASIC 认证(基本认证)
  2. DIGEST 认证(摘要认证)
  3. SSL 客户端认证
  4. FormBase 认证(基于表单认证)


9. 基于 HTTP 的功能追加协议


9.1 全双工通信的 WebSocket


连接的发起方仍是客户端,一旦确立 WebSocket 通信连接,服务器与客户端任意一方都可向对方发送报文。


  1. 推送功能: 支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
  2. 减少通信量: 和 HTTP 相比,不但每次连接时的开销减少,且由于首部信息很小,通信量也减少了。


通信的建立:


  1. 首先使用  HTTP 的 Upgrade 首部字段,告知服务器通信协议发生改变,进行握手。


GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
复制代码


  1. Sec-WebSocket-Key 字段内记录着握手过程中必不可少的键值。Sec-WebSocket-Protocol 字段内记录使用的子协议。


  1. 之前的请求将会被返回 101 Switching Protocols 响应


HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
复制代码


  1. Sec-WebSocket-Accept 的字段值是由握手请求中的 Sec-WebSocket-Key 的字段值生成的。
  2. 成功握手建立 WebSocket 连接之后,通信时不再使用 HTTP 的数据帧,而采用 WebSocket 独立的数据帧。


微信截图_20220426235558.png


9.2  HTTP/2.0


HTTP/2.0 的目标是改善用户在使用 Web 时的速度体验。特点:


  1. HTTP/2.0 采用二进制格式而非文本格式
  2. HTTP/2.0 是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行
  3. 使用报头压缩,HTTP/2.0 降低了开销
  4. HTTP/2.0 让服务器可以将响应主动“推送”到客户端缓存中


10. 构建 Web 内容的技术


10.1 HTML


HTML(HyperText Markup Language,超文本标记语言)是为了发送 Web 上的超文本(Hypertext)而开发的标记语言。


超文本是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本。


10.2 Web 应用


Web 应用是指通过 Web 功能提供的应用程序。


CGI 每次接到请求,都要跟着启动一次,一旦访问量过大,Web 服务器要承担相当大的负载。而 Servlet 运行在与 Web 服务器相同的进程中,因此受到的负载较小。


Servlet 的运行环境叫做 Web 容器或 Servlet 容器。随着 CGI 的普及,每次请求都要启动新 CGI 程序的 CGI 运行机制逐渐变成了性能瓶颈。而 Servlet 常驻内存,在每次请求时,可启动相对进程级别更为轻量的 Servlet,程序的执行效率从而变得更高。


11. Web 的攻击技术


11.1 针对 Web 的攻击技术


HTTP 协议本身并不存在安全性问题,服务器和客户端以及运行在服务器上的 Web 应用等资源才是攻击目标。


HTTP 就是一个通用的单纯协议机制,开发者需要自行设计并开发认证及会话管理功能来满足 Web 应用的安全,因此在运行的应用会隐藏着各种容易被攻击者滥用的安全漏洞。


在客户端即可篡改请求


从浏览器那接收到的 HTTP 请求的全部内容,都可以在客户端自由地变更、篡改。所以 Web 应用接受到的内容可能与预期数据不同。


在 HTTP 请求报文内加载攻击代码,就能发起对 Web 应用的攻击。通过 URL 查询字段或表单、HTTP 首部、Cookie 等途径把攻击代码传入,若这时 Web 应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。


针对 Web 应用的攻击模式


对 Web 攻击的模式有主动攻击和被动攻击两种


主动攻击


指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。


代表性的是 SQL 注入攻击OS 命令注入攻击


被动攻击


指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访问发起攻击。


代表性的是跨站脚本攻击跨站点请求伪造


通常的攻击步骤


  1. 攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的 HTTP 请求。
  2. 当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
  3. 中招后的用户浏览器会把含有攻击代码的 HTTP 请求发送给作为攻击目标的 Web 应用,运行攻击代码。
  4. 执行完攻击代码,存在安全漏洞的 Web 应用会成为攻击者的跳板,可能导致用户所持的 Cookie 等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。


微信截图_20220426235621.png


11.2 因输出值转义不完全引发的安全漏洞


验证主要有两种:


  1. 客户端的验证
  2. Web 应用端(服务器端)的验证,包括输入值验证和输出值转义

一般验证数据是在客户端使用 JS,然而客户端的脚本是可以篡改的,所以不适合作为安全对策。


从数据库或文件系统、HTML、邮件等输出需处理的数据的时候,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会触发攻击者传入的攻击代码。


XSS 跨站脚本攻击


跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的客户端运行非法的 HTML 标签或 JavaScript 进行的一种攻击。动态创建的 HTML 部分有可能隐藏着安全漏洞。


如果用户填写的表单是直接作为 HTML 解析,那么换成 script 标签,就中招了。


SQL 注入攻击


SQL 注入(SQL Injection)是指针对 Web 应用使用的数据库,通过运行非法的 SQL 而产生的攻击。


如果在调用 SQL 语句的方式上存在疏漏,就可能被恶意注入(Injection)非法的 SQL 语句。


比如,如果把表单查询的字段直接拼接给 SQL 语句,那么可能会出现下面这个情况

上面一句查询的是 上野宣,下面一句查询 上野宣'--


SELECT * FROM bookTbl WHERE author = '上野宣' and flag = 1;
SELECT * FROM bookTbl WHERE author = '上野宣'--' and flag = 1;
复制代码


SQL 语句中的 -- 之后全视为注释,因此 and flag=1 这个条件被自动忽略了,失去过滤条件,不想显示的内容也被显示出来了。


OS 命令注入攻击


OS 命令注入攻击(OS Command Injection)是指通过 Web 应用,执行非法的操作系统命令达到攻击的目的。只要在能调用 Shell 函数的地方就有存在被攻击的风险。


HTTP 首部注入攻击


HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。


向首部主体内添加内容的攻击称为 HTTP 响应截断攻击(HTTP Response Splitting Attack)。


比如有时候 Web 应用有时会把从外部收到的值,赋给响应首部字段 LocationSet-Cookie。如果攻击者发送 101%0D%0ASet-Cookie:+SID=123456789 这里的 %0D%0A 代表的是换行符,那么就会导致结果返回:


Location: http://example.com/?cat=101(%0D%0A :换行符)
Set-Cookie: SID=123456789
复制代码


这里攻击者就可以修改任意的 Cookie 信息了。


这个例子中,原本应该属于首部字段 Location 的查询值部分,攻击者输入的 %0D%0A 成了换行符,结果插入了新的首部字段,实际上攻击者可以在响应中插入任意的首部字段。


HTTP 响应截断攻击


HTTP 响应截断攻击是用在 HTTP 首部注入的一种攻击。


攻击顺序相同,但是要将两个 %0D%0A%0D%0A 并排插入字符串后发送。利用这两个连续的换行就可作出 HTTP 首部与主体分隔所需的空行了,这样就能显示伪造的主体,达到攻击目的。


Set-Cookie: UID=(%0D%0A :换行符)
(%0D%0A :换行符)
<HTML><HEAD><TITLE>之后,想要显示的网页内容 <!-- (原来页面对应的首部字段和主体部分全视为注释)
复制代码


利用这个攻击,已触发陷阱的用户浏览器会显示伪造的 Web 页面,再让用户输入自己的个人信息等,可达到和跨站脚本攻击相同的效果。


邮件首部注入攻击


邮件首部注入(Mail Header Injection)是指 Web 应用中的邮件发送功能,攻击者通过向邮件首部 To 或 Subject 内任意添加非法内容发起的攻击。利用存在安全漏洞的 Web 网站,可对任意邮件地址发送广告邮件或病毒邮件。


目录遍历攻击


目录遍历(Directory Traversal)攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击有时也称为路径遍历(Path Traversal)攻击。


通过 Web 应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用 .../ 等相对路径定位到 /etc/passed 等绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。这样一来,就有可能非法浏览、篡改或删除 Web 服务器上的文件。


http://example.com/read.php?log=0401.log
http://example.com/read.php?log=../../etc/passwd
复制代码


远程文件包含漏洞


远程文件包含漏洞(Remote File Inclusion)是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的 URL 充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。


11.3 因设置或设计上的缺陷引发的安全漏洞


强制浏览


对那些原本不愿公开的文件,为了保证安全会隐蔽其 URL。可一旦知道了那些 URL,也就意味着可浏览 URL 对应的文件。比如


http://www.example.com/entry/entry_081202.log
复制代码


这样一个路径,就很容易推测出下一个文件是 entry_081203.log,从而被访问。


不正确的错误消息处理


不正确的错误消息处理(Error Handling Vulnerability)的安全漏洞是指,Web 应用的错误信息内包含对攻击者有用的信息。与 Web 应用有关的主要错误信息如下所示:


  1. Web 应用抛出的错误消息 Web 应用不必在用户的浏览画面上展现详细的错误消息。对攻击者来说,详细的错误消息有可能给他们下一次攻击以提示。

  2. 数据库等系统抛出的错误消息 攻击者从某些错误消息中可读出数据库选用的类型,有时还可看见 SQL 语句的片段。这可能给攻击者进行 SQL 注入攻击以启发。系统应对详细的错误消息进行抑制设定,或使用自定义错误消息。


开放重定向


开放重定向(Open Redirect)是一种对指定的任意 URL 作重定向跳转的功能。而于此功能相关联的安全漏洞是指,假如指定的重定向 URL 到某个具有恶意的 Web 网站,那么用户就会被诱导至那个 Web 网站。比如:


http://example.com/?redirect=http://www.tricorder.jp
http://example.com/?redirect=http://hackr.jp
复制代码


可信度高的 Web 网站如果开放重定向功能,则会被攻击者用来作为钓鱼攻击的跳板。


11.4 因会话管理疏忽引发的安全漏洞


会话劫持


会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话 ID,并非法使用此会话 ID 伪装成用户,达到攻击的目的。


微信截图_20220427000024.png



攻击者在得知该 Web 网站存在可跨站攻击 XSS 的安全漏洞后,就设置好用 JavaScript 脚本调用 document.cookie 以窃取 Cookie 信息的陷阱,获取含有会话 ID 的 Cookie。


拿到用户的会话 ID 后,往自己的浏览器的 Cookie 中设置该会话 ID,即可伪装成会话 ID 遭窃的用户,访问 Web 网站。

微信截图_20220427000109.png


会话固定攻击


对以窃取目标会话 ID 为主动攻击手段的会话劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话 ID,属于被动攻击。


微信截图_20220426235639.png


攻击者设置好强制用户使用该会话 ID 的陷阱,并等待用户拿着这个会话 ID 前去认证。一旦用户触发陷阱并完成认证,会话在服务器上的状态(用户 A 已认证)就会被记录下来,再利用之前这个会话 ID 访问网站。


CSRF 跨站点请求伪造


跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。


微信截图_20220426235646.png


比如这个留言板功能,只允许已认证并登录的用户发表内容。用户的 Cookie 持有已认证的会话 ID。用户如果点击了攻击者留下的恶意代码链接,则会利用用户的信息执行操作。


11.5 其他安全漏洞


密码破解


密码破解攻击(Password Cracking)即算出密码,突破认证。


通过网络进行密码试错主要有下面两种方式:


  1. 穷举法(Brute-force Attack,又称暴力破解法)是指对所有密钥集合构成的密钥空间(Keyspace)进行穷举。
  2. 字典攻击是指利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手法。

字典攻击中有一种利用其他 Web 网站已泄露的 ID 及密码列表进行的攻击,因为很多用户习惯随意地在多个 Web 网站使用同一套 ID 及密码。


对已加密密码的破解通常有下面几种方法:


  1. 通过穷举法/字典攻击进行类推
  2. 彩虹表
  3. 拿到密钥
  4. 加密算法的漏洞


点击劫持


点击劫持(Clickjacking)是指利用透明的按钮或链接做成陷阱,覆盖在 Web 页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪装(UI Redressing)。


已设置陷阱的 Web 页面,表面上内容并无不妥,但早已埋入想让用户点击的链接。当用户点击到透明的按钮时,实际上是点击了已指定透明属性元素的 iframe 页面。


DoS 攻击


DoS 攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对象不仅限于 Web 网站,还包括网络设备及服务器等。


  1. 集中利用访问请求造成资源过载,比如发送大量的合法请求
  2. 通过攻击安全漏洞使服务停止。


后门程序


后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能。利用后门程序就能够使用原本受限制的功能。


可通过监视进程和通信的状态发现被植入的后门程序。但设定在 Web 应用中的后门程序,由于和正常使用时区别不大,通常很难发现。



相关文章
|
存储 安全 算法
Spring Security系列教程06--实现HTTP摘要认证
前言 在前面的2个章节中,一一哥 带大家认识了Spring Security中的第基本认证与表单认证 2种认证方式,其中表单认证是Spring Security默认的认证方式,也是开发时最常用的认证方式。有的小伙伴会问,不是还有第3种认证方式吗?对的,还有第三种摘要认证方式!在本文中,我们来学习了解一下HTTP摘要认证。 但是对于摘要认证,我们仅做了解即可,因为这种认证方式仅比基本认证稍微安全一点,开发时用的也不是很多。抱着艺多不压身的心态,我们多了解一点反正也没坏处。
524 0
|
网络协议 数据处理
【图解Http 学习摘要】一、http介绍、TCP/IP 协议族
【图解Http 学习摘要】一、http介绍、TCP/IP 协议族
【图解Http 学习摘要】一、http介绍、TCP/IP 协议族
|
安全 网络协议 网络安全
【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
【图解Http 学习摘要】五、HTTPS 中的加密、证书介绍,不一直使用 HTTPS 的原因
|
网络协议 安全 网络安全
【图解Http 学习摘要】四、HTTP 缺点
【图解Http 学习摘要】四、HTTP 缺点
【图解Http 学习摘要】四、HTTP 缺点
|
网络协议 安全 网络安全
【图解Http 学习摘要】三、HTTP 协议基础、四次挥手
【图解Http 学习摘要】三、HTTP 协议基础、四次挥手
【图解Http 学习摘要】三、HTTP 协议基础、四次挥手
|
网络协议 大数据
【图解Http 学习摘要】二、IP,TCP 和 DNS、三次握手
【图解Http 学习摘要】二、IP,TCP 和 DNS、三次握手
【图解Http 学习摘要】二、IP,TCP 和 DNS、三次握手
|
Web App开发 缓存 网络协议
《HTTP/2 基础教程》 阅读摘要(下)
最近粗线了不少 HTTP2 相关的帖子和讨论,感觉新一轮的潮流在形成,所以最近找了本 HTTP2 相关书籍做知识储备,刚好记成笔记以备后询 ~ 如果希望获取本书的 PDF 资源,可以关注文末二维码加微信群找群主要~ 这本书本身不错,缺点就是翻译的有点蹩脚,另外因为是 2017 年出的书,所以有些内容时效性不太好,比如关于 Chrome 的部分,所以我根据 Chrome 的官方文档增加了点内容 😅
《HTTP/2 基础教程》 阅读摘要(下)
|
Web App开发 缓存 JavaScript
《HTTP/2 基础教程》 阅读摘要(上)
最近粗线了不少 HTTP2 相关的帖子和讨论,感觉新一轮的潮流在形成,所以最近找了本 HTTP2 相关书籍做知识储备,刚好记成笔记以备后询 ~ 如果希望获取本书的 PDF 资源,可以关注文末二维码加微信群找群主要~ 这本书本身不错,缺点就是翻译的有点蹩脚,另外因为是 2017 年出的书,所以有些内容时效性不太好,比如关于 Chrome 的部分,所以我根据 Chrome 的官方文档增加了点内容 😅
《HTTP/2 基础教程》 阅读摘要(上)
|
存储 缓存 自然语言处理
《图解 HTTP》 阅读摘要(中)
这本 HTTP 方面的小册子还蛮不错,已经二刷了 😜 这次做了一些笔记,方便自己和其他人翻阅和复习,因为这本书是 2014 年出的初版,所以有一些不怎么常用的技术,笔记中就省略了,只记一些比较常用的 ~ 如果希望获取本书的 PDF 资源,可以关注文末二维码加微信群找群主要~
《图解 HTTP》 阅读摘要(中)
|
23天前
|
安全 前端开发 中间件
中间件中HTTP/HTTPS 协议
【6月更文挑战第3天】
18 3