鉴源实验室·HTTP协议网络安全攻击

news2024/11/14 21:39:44

作者 | 李芷若 上海控安可信软件创新研究院工控网络安全组

来源 | 鉴源实验室

社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区”

01

背 景

随着互联网的迅猛发展,HTTP(HyperText Transfer Protocol,超文本传输协议)已经成为网页传输的基础协议。它在客户端(如浏览器)和服务器之间传递信息,使得我们能够浏览网页、提交表单、下载文件等。然而,HTTP 的普及也使其成为黑客攻击的主要目标之一。HTTP 协议本身是无状态的,这种特性虽然简化了网络通信,但也带来了不少安全隐患。

网络安全攻击利用了 HTTP 协议的各种漏洞和特性,试图在数据传输过程中获取未授权的信息、操纵数据、扰乱服务甚至窃取敏感信息。这些攻击不仅对用户隐私构成威胁,还可能导致严重的经济损失和声誉损害。因此,了解和防范 HTTP 网络安全攻击显得尤为重要。

02

HTTP协议介绍

2.1 HTTP协议概念

HTTP(HyperText Transfer Protocol,超文本传输协议)[1]是万维网(World Wide Web)的核心协议之一。HTTP协议初期运行在TCP/IP协议之上,后期运行在QUIC协议之上,是应用层协议。它定义了客户端(如浏览器)和服务器之间如何传输文本、图像、视频及其他多媒体内容。同时,也是一种客户端-服务端(client-server)协议,也就是说,请求是由接收方—通常是浏览器发起的,客户端与服务端之间通过交换一个个独立的消息(而非数据流)进行通信。由客户端——通常是个浏览器——发出的消息被称作请求(request),由服务端发出的应答消息被称作响应(response)。

图1

2.2 HTTP协议报文格式

HTTP 报文是面向文本的,报文中的每个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP 有两类报文:请求报文和响应报文。

图2 HTTP请求报文

HTTP 请求报文由以下内容组成:

◆ 请求行

   · 请求方法

   · 请求URL

   · HTTP协议版本

◆ 请求头部:请求头部包含了多个头字段,每个字段包含一个名称和一个值,用于传递客户端的额外信息和指示。每个头字段占一行。

◆ 空行:空行用于分隔请求头部和请求主体。它仅包含回车符和换行符(CRLF),即 \r\n。

◆ 请求主体:请求主体包含了实际发送的数据,仅在某些方法(如 POST、PUT)中存在。它可以是任意二进制数据或文本数据,格式没有固定要求。

图3 HTTP响应报文

HTTP响应报文由以下内容组成:

◆ 状态行

   · HTTP协议版本

   · 状态码

   · 状态短语

◆ 响应头部:响应头部包含了多个头字段,每个字段包含一个名称和一个值,用于传递服务器的额外信息和指示。每个头字段占一行。

◆ 空行:空行用于分隔响应头部和响应主体。它仅包含回车符和换行符(CRLF),即 \r\n。

◆ 响应主体:响应主体包含了实际返回的数据,通常是 HTML 文档、图像、JSON 数据等,格式没有固定要求。

2.3 HTTP协议发展

HTTP/1.0(于1996年发布)最初是由Tim Berners-Lee[2]在1989年提出,是“无状态”的:每个客户端的新请求都建立了一个新连接,而不是通过特定客户端和服务器之间的相同连接处理所有类似的请求。

HTTP/1.1(于1997年发布)包括持久连接、客户端浏览器对HTML文件的解压缩,以及多个域名共享相同的IP地址。

HTTP/2(于2015年发布)旨在解决网页加载缓慢的问题,并且是一种二进制协议,其中使用二进制值而不是像以前版本中那样使用纯文本。

HTTP/3 (于2020年发布)依赖于更快的QUIC协议而不是TCP,受大多数浏览器支持。

2010 年代,许多网站开始使用HTTPS(安全 HTTP),这是由 Netscape Communications Corporation 在1994年开发的,其中添加了SSL(安全套接字层)协议到HTTP中,为浏览器和服务器之间提供加密层。

2.4 HTTP协议性质

(1)无状态

HTTP是一个基于请求-响应模型的无状态协议。无状态意味着每个请求都是独立的,服务器不会保留之前请求的状态信息。这种设计虽然简化了协议,但也需要引入额外的机制来维护状态,如cookies、sessions等。

(2)无连接

HTTP 是一种无连接协议。每次请求和响应都通过独立的连接完成,服务器处理完请求后即关闭连接。这种特性简化了服务器设计,但也带来了连接频繁创建和关闭的开销。

(3)灵活性

HTTP 可以传输任意类型的数据,只要两端能处理数据的内容类型。通过MIME类型(Content-Type)进行标识和处理。例如,文本数据可以是 HTML、JSON、XML 等,二进制数据可以是图像、视频、应用程序数据等。

(4)可扩展性

HTTP 协议支持通过添加新的方法、头字段来扩展功能。例如,HTTP/1.1 引入了许多新的头字段和方法,HTTP/2 和 HTTP/3 引入了更多优化和功能改进。

03

常见攻击方式

3.1 SQL Injection(SQL 注入)

原理:SQL注入[3]是一种将恶意代码插入到程序SQL语句中,从而误导数据库执行恶意逻辑的攻击技术。通过SQL注入,攻击者可以达到获取敏感信息,窃取访问权限等目的。

比如后端有SQL如下,需要前端传入一个id值,以进行信息查询:

SELECT * FROM `MyTable` WHERE `id`="{0}"

而此时,如果前端传入“1” OR TRUE。后端没有校验便传入参数值并对SQL进行拼接。那么直接拼接的SQL为:

SELECT * FROM `MyTable` WHERE `id`="1" OR TRUE

此时将所有数据全部取出。如果后端SQL是DELETE,影响更是不可估量。

防范:SQL 注入得以实施的因素是:网页应用使用 SQL 来控制数据库,用户传入的数据直接被写入数据库。因此,防御 SQL 注入的关键在于:永远不要相信用户的输入;

在此理念的指导下,对于用户提交的输入信息,我们需要进行充分的校验,避免其对后端服务系统造成攻击。相关手段可以是正则式检验参数合法性、html元素校验、SQL元素校验,对用户输入的内容进行转义(escape)处理,不让特殊符号破坏SQL语句的原本结构等,并且可以在前端/后端执行。

如果校验逻辑在前端执行,确实不会对后端性能造成影响,但对于有经验的攻击者,可以修改前端代码,此屏障就形同虚设;而如果在后端进行校验,多少会损耗后端性能,如果校验算法比较复杂耗时,也许又会成为攻击者的另一个攻击点。

根据 OWASP,下面看看具体的预防措施

◆ Prepared Statements(with Parameterized Queries): 参数化的查询语句可以强制应用开发者首先定义所有的sql代码,之后再将每个参数传递给查询语句。

◆ Stored Procedures:使用语言自带的存储程序,而不是自己直接操纵数据库。

◆ White List Input Validation:验证用户的输入。

◆ Escaping All User Supplied Input: 对用户提供的所有的输入都进行编码。

3.2 Distributed Denial of Service(DDoS,分布式拒绝服务)

原理:HTTP DDoS攻击[4]是一种特定类型的DDoS攻击,旨在通过大量HTTP请求淹没目标Web服务器,使其无法正常处理合法用户的请求。总体而言,DDoS 攻击好比高速公路发生交通堵塞,妨碍常规车辆抵达预定目的地。

大致分为以下几类:

◆ HTTP Flood攻击:攻击者通过发送大量合法的HTTP GET或POST请求来耗尽目标服务器的资源,如CPU、内存和带宽。GET请求通常用于获取资源(如网页、图片等),而POST请求则用于提交数据(如表单数据)。

◆ Slowloris攻击:这种类型的攻击更多是面向连接层面,以基于线程的Web服务器为目标,通过慢速请求来捆绑每个服务器线程,从而消耗服务器的线程&连接资源。攻击者与服务器建立大量连接,每个连接只发送部分请求头,并在接近超时之前继续发送更多的头部数据,从而保持连接活跃。

 Large Payload POST requests攻击:一般通过POST方法发送容量大、结构复杂的请求体到目标服务器,使得目标服务器在解析这些请求内容的过程发生过载(CPU或内存);攻击者通过构造特定的序列化请求体,如xml、json等,在服务端执行反序列化操作时引起服务过载。

◆ HTTP请求随机化攻击:攻击者使用各种随机化技术,改变User-Agent头、Referer头、URL参数等,使请求难以被简单地识别和过滤,使每个HTTP请求看起来都是唯一的,从而绕过基于签名的防御机制。

DDoS攻击一般会根据攻击目标的情况,针对性的把技术手法混合,以达到最低的成本最难防御的目的,并且可以进行合理的节奏控制,以及隐藏保护攻击资源。

防范:

◆ Web应用防火墙(WAF):过滤和阻止恶意HTTP请求。

◆ CDN(内容分发网络):使用CDN将流量分散到多个节点,提高整体抗攻击能力。

◆ 流量清洗服务:使用专门的DDoS防护服务来识别和清洗恶意流量。

◆ 速率限制(Rate Limiting):对单个IP地址或用户的请求速率进行限制,防止过多的请求来自同一来源。

3.3 Cross Site Script(XSS, 跨站脚本攻击)

原理:XSS是一种安全漏洞。攻击者可以利用这种漏洞在网站上注入恶意的客户端代码。当受害者运行这些恶意代码时,攻击者就可以突破网站的访问限制并冒充受害者。根据开放式Web应用安全项目(OWASP)的数据,XSS是 2017年第七名[5]最常见的Web应用程序漏洞。

如果 Web 应用程序没有部署足够的安全验证,那么,这些攻击很容易成功。浏览器无法探测到这些恶意脚本是不可信的,所以,这些脚本可以任意读取cookie、session token,或者其他敏感的网站信息,或者让恶意脚本重写HTML内容。

大致分为以下几类:

◆ 存储XSS:注入的脚本永久的存在于目标服务器上,每当受害者向服务器请求此数据时就会重新唤醒攻击脚本。

◆ 反射型XSS:当用受害者被引诱点击一个恶意链接,提交一个伪造的表单,恶意代码便会和正常返回数据一起作为响应发送到受害者的浏览器,从而骗过了浏览器,使之误以为恶意脚本来自于可信的服务器,以至于让恶意脚本得以执行。

◆ DOM型XSS:有点类似于存储型XSS,但存储型XSS是将恶意脚本作为数据存储在服务器中,每个调用数据的用户都会受到攻击。但DOM型XSS则是一个本地的行为,更多是本地更新DOM时导致了恶意脚本执行。

防范:

◆ 输入验证:从客户端和服务器端双重验证所有的输入数据,这一般能阻挡大部分注入的脚本。

◆ 数据编码:对所有的数据进行适当的编码。

3.4 Cross Site Request Forgery(CSRF,跨站请求伪造)

原理:CSRF攻击[6]是一种利用用户在已登录网站上的身份来伪造用户请求的攻击方式,造成用户数据的损失或网络安全的风险。也是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

CSRF 攻击一般是攻击者通过某些手段,伪造用户请求,让用户在不知情的情况下,达到攻击者预期的目的,主要涉及以下步骤:

a. 攻击者获取用户已登录的Cookie信息。

b. 攻击者构造一些恶意代码,将这些代码注入到受害者的浏览器中。

c. 受害者在未经过任何提示的情况下,被恶意代码引导访问攻击者的网站,其中URL中包含了攻击者构造的恶意参数。

d. 受害者浏览器访问攻击网站时,将自动向受害者之前已登录过的网站发送请求(上面存在的请求)。

e. 被恶意代码引导,受害者访问攻击者的网站,正在被他人攻击造成的后果并不为受害者所知,而浏览器会自动发送包含受害者的Cookie信息的请求,造成CSRF攻击。

当攻击者伪造了用户的请求后,服务器端将无法准确判断这个请求的合法性,导致用户数据被篡改、删除、操作等,产生极大的安全风险。因此,在设计Web应用程序时,需要充分考虑CSRF防御策略以保护用户的信息安全。

防范:那怎么预防CSRF攻击呢?OWASP推荐了两种检查方式来作为防御手段。

◆ 检查标准头部,确认请求是否同源:检查source origin和target origin,然后比较两个值是否匹配。

 检查 CSRF Token:主要有四种推荐的方式

   · Synchronizer Tokens:在表单里隐藏一个随机变化的token,每当用户提交表单时,将这个token提交到后台进行验证,如果验证通过则可以继续执行操作。

   · Double Cookie Defense:当向服务器发出请求时,生成一个随机值,将这个随机值既放在cookie中,也放在请求的参数中,服务器同时验证这两个值是否匹配。

   · Encrypted Token Pattern:对token进行加密。

   · Custom Header:使用自定义请求头部,这个方式依赖于同源策略。其中最适合的自定义头部便是:"X-Requested-With: XMLHttpRequest"。

参考文献:

[1] Gourley D, Totty B. HTTP: the definitive guide[M]. " O'Reilly Media, Inc.", 2002.

[2] 李康,陈清华,卢金星. HTTP协议研究综述[J]. 信息系统工程,2021(5):126-129. DOI:10.3969/j.issn.1001-2362.2021.05.050.

[3] 刘文生, 乐德广, 刘伟. SQL注入攻击与防御技术研究[J]. 信息网络安全, 2015, 15(9): 129-134.

[4] Prajapati P, Patel N, Shah P. A review of recent detection methods for http ddos attacks[J]. International Journal of Scientific, 2019.

[5] Rodríguez G E, Torres J G, Flores P, et al. Cross-site scripting (XSS) attacks and mitigation: A survey[J]. Computer Networks, 2020, 166: 106960.

[6] Blatz J. Csrf: Attack and defense[J]. McAfee® Foundstone® Professional Services, White Paper, 2007.

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

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

相关文章

萝卜快跑引领换电革命,储能蓝海爆发千亿商机,你抓住了吗?

近日,百度旗下的无人驾驶出行服务平台“萝卜快跑”火爆出圈,7月10日凭借优秀的订单量表现成功助推百度股价上涨超10%,其六公里4元的超高性价比广受好评。多个网络平台的自媒体博主们也抓准时机开始各类测评体验。 百度“萝卜快跑”无人驾驶项…

QT安装 error: [QNetworkReply::NetworkError(

QT安装遇到问题: [29040] Warning: No QtAccount credentials found. Please login via the maintenance tool of the SDK. [29040] Warning: No QtAccount credentials found. Please login via the maintenance tool of the SDK. [31404] Warning: Network error…

linux用户组练习

准备工作 [rootlocalhost ~]# watch -n 1 tail -n 5 /etc/group使用watch 动态监控 1.建立用户组 shengcan,其id 为2000 2.建立用户组 caiwu,其id 为 2001 3.足建立用户组 jishu,其id 为 2002 4.建立用户lee,指定其主组id为sh…

QT多媒体编程(二)——视频编程知识详解及mp4视频播放器Demo

目录 引言 1. QMediaPlayer 类详解 1.1 基本用法 示例代码: 1.2 常用函数 2. QVideoWidget 类详解 2.1 基本用法 示例代码: 2.2 常用函数 3. 实际案例:视频播放器 UI界面 核心代码: 运行结果: 4. 总结 引…

NodeJS凉山地区特色农产品团购平台-计算机毕业设计源码72936

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 用户登录流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4用例分析 2.5本章小结 3 系统总体设计 3…

【LeetCode每日一题】2024年8月第一周(上)

2024.7.30 中等 链接:2961. 双模幂运算 (1)题目描述: (2)示例: (3)分析: ① 在计算中,反复用到了%10,说明返回的只要取个位即可&…

SEO之网站结构优化(八)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 8、URL静态化 URL静态化一直以来都是最基本的SEO要求之一,但近一两年 SEO 行业对是否一定要做静…

科普文:万字细说微服务及其框架Netflix,Spring Cloud,Spring Cloud Alibaba梳理

概叙 微服务(Microservices)是一种软件架构风格,它将单一的应用程序拆分为多个小的服务,每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能,具有自己的数据存储,并且通过轻量级的通信机制…

多无人机协同机间通信技术详解

随着无人机技术的飞速发展,多无人机系统(Multi-Unmanned Aerial Vehicle, Multi-UAV)在军事侦察、环境监测、目标跟踪、物流配送等多个领域展现出巨大潜力。多无人机协同作业的核心在于高效的机间通信技术,它能够实现无人机之间的…

npm install 巨慢,导致Jenkins编译报错问题解决——基础积累

今天在弄后台系统的服务器编译时,一直报错。报错信息为:系统找不到指定的路径。 最后进入到服务器中,找到E:/Jenkins/WorkSpace/JiePeiAiMomsAdmin_FenZhi这个路径,然后通过cmd进入到命令提示符中。 然后通过npm i进行安装&#…

简单的docker学习 第4章docker容器

第4章 Docker容器 4.1 容器基础 4.1.1 容器启动流程 通过 docker run 命令可以启动运行一个容器。该命令在执行时首先会在本地查找指定的镜像,如果找到了,则直接启动,否则会到镜像中心查找。如果镜像中心存在该镜像,则会下载到…

外贸建站:WordPress搭建外贸独立站零基础小白保姆级教程

凡做外贸的,我相信在过去几年中通过亚马逊、速卖通等电商平台上都取得了一定的成功。然而,近年来电商平台上的竞争激烈,利润空间有限,流量获取困难和昂贵,这对许多外贸从业者造成了困扰。因此,为了减少对平…

易境通散货集拼系统是如何让散拼效率提高80%的?

散货集拼为什么必须要有靠谱的系统才行?因为散拼很容易出现各种问题,而且会连带着影响不同的环节。货物整箱利用空间不充足,会导致集装箱数量增加,运费成本激增,返工整理会耽误发货,延长送货时间&#xff0…

【JavaEE】线程状态

目录 前言 一.线程状态图 二.线程状态 1.初始状态(NEW) 2.运行状态(RUNNING) 3.等待状态(WAITING) 4.超时等待(TIMED_WAITING) 5.阻塞状态(BLOCKED) 6.终止状态(TERMINATED) 三.线程状态间的转换 四.总结 前言 线程状态及其状态转换…

mindspore框架下Pix2Pix模型实现真实图到线稿图的转换|(三)Pix2Pix模型训练与模型推理

mindspore框架下Pix2Pix模型实现真实图到线稿图的转换 mindspore框架下Pix2Pix模型实现真实图到线稿图的转换|(一)dataset_pix2pix数据集准备mindspore框架下Pix2Pix模型实现真实图到线稿图的转换|(二)Pix2Pix模型构建mindspore框…

Google Gemma2 2B:语言模型的“小时代”到来?

北京时间8月1日凌晨(当地时间7月31日下午),Google发布了其Gemma系列开源语言模型的更新,在AI领域引发了巨大的震动。Google Developer的官方博客宣布,与6月发布的27B和9B参数版本相比,新的2B参数模型在保持…

python实现consul的服务注册与注销

我在使用consul的时候主要用于prometheus的consul服务发现,把数据库、虚拟机信息发布到consul,prometheus通过consul拿到数据库、虚拟机信息去采集指标信息。 此篇文章前提是已经安装好consul服务以后,安装consul请参考二进制方式部署consul…

Nat网络地址转换实验

一、实验拓扑 二、实验要求 三、实验思路 四、实验展示 1.接口IP配置 telnet路由器 r1 r2 r3 pc2 2.全网可达(给边界路由器,私家路由器写上缺省 ,还要用到nat地址转换,多对多一对多,端口映射)因为左右…

第22集《大佛顶首楞严经》

请大家打开讲义第四十九页,“寅三、大众茫然”。 我们要是读《金刚经》,就知道整个修学的方向。《金刚经》就是讲到,一个菩萨发了菩提心,心中有目标,要能够上求佛道,下化众生,但是他不知道“云…

探索味蕾新境界:嘴尚绝卤味,一口难忘的美味传奇

在美食的浩瀚星空中,总有一些味道能够穿越时光的长河,直击人心最柔软的部分,让人回味无穷。今天,就让我们一起走进“嘴尚绝”卤味的世界,感受那份独特而令人难以忘怀的口感之美。 一、卤味之魂,匠心独运 “…