- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
首先,我不是 C 程序员,而且 OpenSSL 代码库很大,所以请原谅我问了一个我可能会找到答案的问题,因为我有时间和技能来深入研究代码。
据我所知,TLS 在 TCP 上运行。 TCP 是面向流的,因此无法知道消息何时已交付。您必须事先知道传入的消息应该有多长,或者有一个要扫描的分隔符。
考虑到这一点,OpenSSL 如何在收到完整有效负载之前处理心跳请求?
如果 OpenSSL 在收到有效负载长度后才开始处理它从 TCP 套接字读取的第一 block 数据,那么 OpenSSL 不仅不安全,而且在正常操作下会损坏。由于 TCP 的最大段大小为 536 字节,任何大于该大小的有效负载都将跨越多个 TCP 段,因此可能跨越多个套接字读取。
所以问题是:OpenSSL 如何/为什么可以开始处理尚未传送的消息?
最佳答案
This是心跳包的定义。
struct {
HeartbeatMessageType type;
uint16 payload_length;
opaque payload[HeartbeatMessage.payload_length];
opaque padding[padding_length];
} HeartbeatMessage;
payload_length
字段的不正确处理是导致 heartbleed 错误的原因。
然而,整个数据包本身都封装在 another record 中它有自己的有效载荷长度,大致如下所示:
struct {
ContentType type;
ProtocolVersion version;
uint16 length;
opaque fragment[TLSPlaintext.length];
} TLSPlaintext;
结构体 HeartbeatMessage 放在上面的 fragment
中。
因此,当根据此处的length
字段的数据到达时,可以处理一个完整的TLS“数据包”,但在内部Heartbeat消息中,openssl未能验证其payload_length
.
这是一个数据包捕获的屏幕截图,其中您可以看到外部长度 3 指定了“数据包”的长度,而内部(错误的)负载长度 16384 是导致漏洞利用的原因,因为 openssl 未能根据数据包的实际接收长度验证这一点。
当然,在处理这个外层记录的length
字段时也必须要小心,在开始处理之前你真的要确保你确实收到了length
数据/解析数据包的内容。
另请注意,套接字读取和 TCP 段之间没有特定的相关性,1 个套接字读取可以读取多个段,或者只是一个段的一部分。对于应用程序来说,TCP 只是一个字节流,一次套接字读取最多只能读取一个 TLSPlaintext 数据包长度字段的一半,或者它可以读取几个完整的 TLSPlaintext 数据包。
关于c - 心脏出血错误 : Why is it even possible to process the heartbeat request before the payload is delivered?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23159622/
概述 我想实现一个 Lucene 索引器/搜索器,它使用新的有效负载功能,允许向文本添加元信息。在我的具体情况下,我向概念标签添加权重(可以理解为 % 概率,介于 0 到 100 之间),以便使用它们
我正在分析一个 metasploit 漏洞 here我试图弄清楚 payload.encoded 中的 payload 来自第 358 行。我是开发开发的新手,但基本的编程规则说 payload 应该
我从我的 javascript 发送交易 Metamask 打开传输对话框 我确定 i get an error message in metamask (inpage.js:1 MetaMask -
action.payload 何时、何地以及为什么被调用?请任何人帮助我了解action.payload的实际用途是什么。我已经搜索了很多网站,但我不明白.. 最佳答案 当您处理请求时,例如单击我们需
我用 Angular 编写代码,在一种情况下,json 返回一个值(如有效负载),我需要对其进行解密。我有一个这样的有效载荷: 我需要解码它。像下面的方式:例如,$B 部分的值我只需要 14,$s 的
我正在编写一个进行服务调用的 Chrome 扩展。 当我发出同源 POST ajax 请求时,我的数据对象以 JSON 格式传递: $.ajax(sameOriginURL, { data
如何在连接语句的 lambda 中访问信号的“有效负载”? 假设信号看起来像这样: signals: void stateChanged(std::pair); 现在在 connect 语句中,我
我正在尝试使用 RestSharp 来使用查询 rest,但我总是收到 Bad Request 响应。代码: var url = "https://gql.tokopedia.com/graphql/
在 Android GCM 文档中,据说有效载荷最大为 4096 字节限制。 payload的4096字节是否包括registration_id长度?我发现我可以发送有效载荷为 16038 字节(包括
前言 做过前后端联调的小伙伴,可能有时会遇到一些问题。例如,我明明传递数据给后端了,后端为什么说没收到呢?这时候可能就会就会有小伙伴陷入迷茫,本文从chrome-dev-tools(F12调试器)中看
我将 JSON 提供给某个网络钩子(Hook)以触发通知 (M$ Teams)。这很好用。但是,我想扩展我的 Perl 脚本:我需要在特定条件下向我的“messagecard”构造添加一个新节点。 例
我有一个 Xamarin 项目(UWP 和 iOS)在 VS2015 中构建并运行良好。 该项目包含一些通用 Windows 和 iOS 项目,以及两个平台使用的许多 PCL(用于 View 模型、服
我正在使用 Hyperledger Fabric Java SDK 通过 txId 获取交易。返回对象包含交易信息。 TransactionInfo txInfo = channel.queryTra
我有以下代码,用于检查 token 并授权 Google 用户登录 GoogleIdToken.Payload tempPayload = token.getPayload(); if (!tempP
当我们使用 sqlmap ,它会自动执行查找网站的 sql 注入(inject) 的所有操作。我感兴趣的是我直接在我的浏览器中发送恶意查询并在其中获取结果,但是当我找不到任何东西时,我使用 sqlma
我正在使用 Redux 和 React 从 API 加载数据。尽管成功提取数据并将其应用到状态,但它会抛出错误: Uncaught TypeError: Cannot read property 'p
我对 python 的随机函数有一个问题。我不知道哪个随机函数适用于此代码: name=['toffla','rebecca','toff','becca'] if (parser.getPayloa
在阅读了 Heartbeat 的 RFC 6520 后,我有几个问题: https://www.rfc-editor.org/rfc/rfc6520 具体来说,我不明白为什么心跳需要包含任意有效负载甚
如何用php curl发送请求负载? 我正在尝试将一个文件上传到一个免费托管文件的服务器,当将文件发送到curl时,我不接受它,我重定向到一个错误页,当我从您的interfas中执行此操作时,我可以在
我有一个非 ARC 项目,现在我在成功迁移后使用 SDK 8.1 迁移了应用程序 Xcode 6,当我尝试将其存档时,*.ipa 文件已创建,但如果我尝试通过上传应用程序diawi 或 hokey 应
我是一名优秀的程序员,十分优秀!