Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go1.20.3 发布

Go1.20.3 发布

原创
作者头像
iginkgo18
发布于 2023-04-08 08:48:48
发布于 2023-04-08 08:48:48
1.3K00
代码可运行
举报
文章被收录于专栏:devops_k8sdevops_k8s
运行总次数:0
代码可运行

近日,Go 官方发布了 Go 1.20.3 和 Go 1.19.8,这是两个小版本,主要涉及 4 个安全更新,具体包括:

  • go/parser:

解析中的无限循环

在包含行号非常大的 //line 指令的 Go 源代码上调用任何 Parse 函数都可能由于整数溢出而导致无限循环。

issue 地址:https://go.dev/issue/59180

  • html/template

反引号不被视为字符串定界符;

模板没有正确地将反引号 (`) 视为 Javascript 字符串定界符,因此没有按预期转义它们。从 ES6 开始,反引号用于 JS 模板文字。如果模板在 Javascript 模板文字中包含 Go 模板操作,则操作的内容可用于终止文字,将任意 Javascript 代码注入 Go 模板。

由于 ES6 模板文字相当复杂,并且它们本身可以进行字符串插值,我们决定简单地禁止在其中使用 Go 模板操作(例如“var a = {{.}}”),因为没有明显安全的方法允许这样做行为。这采用与https://github.com/google/safehtml 相同的方法。Template.Parse 现在会在遇到这样的模板时返回错误,当前未导出的 ErrorCode 值为 12。此 ErrorCode 将在下一个主要版本中导出。

依赖此行为的用户可以使用 GODEBUG 标志 jstmpllitinterp=1 重新启用它,但需要注意的是反引号现在将被转义。这应该谨慎使用。

issue 地址:https://go.dev/issue/59234

  • net/http,net/textproto:

内存分配过多导致拒绝服务

HTTP 和 MIME 标头解析可能会分配大量内存,即使在解析小输入时也是如此。

输入数据的某些异常模式可能会导致用于解析 HTTP 和 MIME 标头的通用函数分配比保存已解析标头所需的内存更多的内存。攻击者可以利用此行为导致 HTTP 服务器从一个小请求中分配大量内存,从而可能导致内存耗尽和拒绝服务。

标头解析现在仅正确分配保存已解析标头所需的内存。

issue 地址:https://go.dev/issue/58975

  • net/http, net/textproto, mime/multipart:

过度资源消耗导致的拒绝服务

在处理包含大量部分的表单输入时,multipart 表单解析会消耗大量 CPU 和内存。这源于几个原因:

mime/multipart.Reader.ReadForm 限制了解析的多部分表单可以消耗的总内存。ReadForm 可能低估了消耗的内存量,导致它接受比预期更大的输入。限制总内存并不能解决垃圾收集器因具有许多部分的表单中的大量小分配而增加的压力。ReadForm 可以分配大量短暂的缓冲区,进一步增加垃圾收集器的压力。这些因素的组合可能允许攻击者使解析多部分表单的程序消耗大量 CPU 和内存,从而可能导致拒绝服务。这会影响使用 mime/multipart.Reader.ReadForm 的程序,以及在 net/http 包中使用请求方法 FormFile、FormValue、ParseMultipartForm 和 PostFormValue 进行的表单解析。

ReadForm 现在可以更好地估计已解析表单的内存消耗,并执行更少的短期分配。

此外,mime/multipart.Reader 现在对已解析表单的大小施加以下限制:

使用 ReadForm 解析的表单可能包含不超过 1000 个部分。可以使用环境变量 GODEBUG=multipartmaxparts= 调整此限制。使用 NextPart 和 NextRawPart 解析的表单部件可能包含不超过 10,000 个标头字段。此外,使用 ReadForm 解析的表单在所有部分中可能包含不超过 10,000 个标题字段。可以使用环境变量 GODEBUG=multipartmaxheaders= 调整此限制。

issue 地址:https://go.dev/issue/59153

从这些问题看出,很多程序可能都有使用到相关的 API,因此建议大家升级。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go install golang.org/dl/go1.20.3@latest
go1.20.3 download
go1.20.3 version
go version go1.20.3 linux/arm

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go 1.20 发行说明(翻译)
美国时间 2023 年 2 月 1 日,Go 团队官宣 Go 1.20 正式发布。下面让我们一起了解下 Go 1.20 为我们带来的新特性吧。
恋喵大鲤鱼
2023/10/12
7860
Go1.24版本终于来了!各位开发者,准备好迎接这些激动人心的新功能了吗?让我们一起来探讨下Go1.24中有哪些精彩的亮点?
Gopher们,Go 1.24.0 正式发布了!与 Go 1.23.0 相比,这个版本带来了众多改进。让我们一同看看 Go 1.24.0 都有哪些新变化吧!
福大大架构师每日一题
2025/03/03
2500
Go1.24版本终于来了!各位开发者,准备好迎接这些激动人心的新功能了吗?让我们一起来探讨下Go1.24中有哪些精彩的亮点?
由定界符引发的一些安全问题
前一段时间在p 师傅的小密圈中看到了他分享的定界符安全以及一则 Django 的安全修复公告,趁着有时间,对定界符相关的安全问题学习了一波。
p4nda
2023/01/03
1.2K0
由定界符引发的一些安全问题
RFC1945 超文本传输协议--HTTP/1.0 之一
组织:中国互动出版网(http://www.china-pub.com/) RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm) E-mail:ouyang@china-pub.com 译者:黄晓东(黄晓东 xdhuang@eyou.com) 译文发布时间:2001-7-14 版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须 保留本文档的翻译及版权信息。 Network Working
苦叶子
2018/07/25
1.3K0
Node Express使用Multer中间件实现文件上传
Multer是一个Node.js中间件,用于处理 multipart/form-data类型的表单数据,它主要用于上传文件。它是写在busboy之上非常高效。
吴佳
2022/09/26
3.1K0
java 如何实现大文件上传下载(传输)各种格式「建议收藏」
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。
全栈程序员站长
2022/09/06
2.9K0
java 如何实现大文件上传下载(传输)各种格式「建议收藏」
PGO in Go 1.21
在2023年早些时候,Go 1.20发布了供用户测试的概要版本的基于性能分析的优化(PGO)[2]。经过解决预览版已知的限制,并得益于社区反馈和贡献的进一步改进,Go 1.21中的PGO支持已经准备好供一般生产使用!请查阅性能分析优化用户指南[3]以获取完整的文档。
孟斯特
2023/10/19
4010
PGO in Go 1.21
PHP Multipart/form-data remote DOS 防御方案研究
这个的DOS漏洞炒得很火,百度安全攻防实验室的小伙伴也很给力。我个人认为漏洞的影响确实很大,毕竟对于一个web应用,拒绝服务攻击可以说是杀死它最简单的方法。这样大张旗鼓地说也很必要,也是一种加速杀死php 5.2/5.3的方式。
phith0n
2020/10/15
7820
向后兼容,Go1.21,Go2
Go 1.21包含了新的特性以提高兼容性。在你停止阅读之前,我知道这听起来很无聊。但无聊可以是好事。在Go 1的早期,Go是令人兴奋的,充满了惊喜。每周我们都会发布一个新的快照版本,每个人都可以掷骰子看看我们改变了什么,他们的程序会如何崩溃。我们发布了Go 1和它的兼容性承诺,以消除这种兴奋,使得Go的新版本变得无聊。
孟斯特
2023/10/16
4140
向后兼容,Go1.21,Go2
Go语言10年版本演进 (2012.03--2022.03)
随着 Go 第一个版本发布的还有一份兼容性说明文档[2] 。该文档承诺,Go 的未来版本会尽可能确保向后兼容性,不会破坏现有程序。
fliter
2023/06/18
5380
Go语言10年版本演进 (2012.03--2022.03)
Spring Boot 2.0 多图片上传加回显
点击上方蓝色“程序猿DD”,选择“设为星标” 回复“资源”获取独家整理的学习资料! 来源:http://r6f.cn/crEY 这两天公司有需求让做一个商户注册的后台功能,其中需要商户上传多张图片并回显。由于之前没做过这方面的东西,此篇文章用以记录一些知识点,以便后续查看。 上传 Controller的代码非常简单,由于用了SpringMVC框架,所以直接用MultipartFile来接即可。由于是多图片上传所以用数组来接。此处应该注意参数名应该和<input>中的name值相对应 @RequestMap
程序猿DD
2023/04/17
7980
Spring Boot 2.0 多图片上传加回显
JDK 14即将发布,你所要知道的都在这里!
JEP 305: Pattern Matching for instanceof (Preview)
Yano_nankai
2020/01/15
1K0
JDK 14即将发布,你所要知道的都在这里!
深入理解文件上传下载的原理及实现逻辑
文件上传的是根据 http 协议的规范和定义,完成请求消息体的封装和消息体的解析,然后将二进制内容保存到文件。
Lion 莱恩呀
2025/01/01
3830
深入理解文件上传下载的原理及实现逻辑
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。
全栈程序员站长
2022/08/22
8110
看完这篇HTTP,跟面试官扯皮就没问题了
PHP安全开发中常见的Dos风险
近期收到某友方 SRC 发来的邮件,反馈站点中存在可被 Dos 的风险, 复测后发现确实存在此类风险。
信安之路
2018/08/08
9550
PHP安全开发中常见的Dos风险
精通Go语言文件上传:深入探讨r.FormFile函数的应用与优化
在 Web 开发中,文件上传是一项常见的功能需求,用于允许用户向服务器提交文件,如图像、文档、视频等。Go 语言作为一门强大的服务器端编程语言,提供了方便且高效的方式来处理文件上传操作。其中,r.FormFile 函数是 Go 语言中处理 HTTP 请求中文件上传的关键函数之一。
繁依Fanyi
2024/04/02
5730
密码学系列之:内容嗅探
内容嗅探,也被称为媒体类型嗅探或MIME嗅探,是检查一个字节流的内容,试图推断其中数据的文件格式的做法。内容嗅探通常用在媒体类型没有被准确指定的情况,用于补偿元数据信息。
程序那些事
2021/03/10
1.1K0
JDK 15已发布,你所要知道的都在这里!
JDK 15已经在2020年9月15日发布!详情见 JDK 15 官方计划。下面是对 JDK 15 所有新特性的详细解析!
Yano_nankai
2020/09/19
8010
JDK 15已发布,你所要知道的都在这里!
Go Performance
计算机系统自下而上可分为:硬件、操作系统和应用程序,其中操作系统管理着各种计算机硬件,并控制和协调应用程序对硬件的分配与使用。
gopher云原生
2022/11/22
6210
Go Performance
HTTP消息
HTTP报文,又称HTTP消息,是服务器和客户端之间交换数据的方式。有两种类型的消息:请求,由客户端发送用来触妓一个服务器上的动作;响应,来自服务器的应答。
Dreamy.TZK
2020/08/10
9210
推荐阅读
相关推荐
Go 1.20 发行说明(翻译)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验