登录
首页 >  Golang >  Go问答

最佳实践:在服务器上执行不受信任的可执行文件

来源:stackoverflow

时间:2024-03-11 15:33:27 290浏览 收藏

本篇文章给大家分享《最佳实践:在服务器上执行不受信任的可执行文件》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我正在尝试创建一个编译并运行用户提交的代码的服务器。如何在服务器端运行可执行输出(从代码编译,不可靠),而不影响我的代码库(二进制可执行文件本身)?

docker 在这里有用吗?如果“是”,怎么办?

仅供参考,我正在使用微服务架构。并进行该服务的服务器端开发(代码运行程序)。


解决方案


运行不可靠代码的最佳方法是隔离它,我们在逆向工程恶意软件时经常这样做。由于您使用的是 Docker,因此您需要采取一些在使用虚拟机时不需要的预防措施。

最安全的方法是使用另一个 Docker 容器,仅用于编译、执行和执行任何其他所需的操作。

让我们以一个应用程序为例,用户发送代码,我们为他运行该代码,并将其与预期输出进行比较,就像在 Codeforces 这样的编程竞赛中一样。

  1. 主应用程序接收代码
  2. 主应用程序创建一个特殊的 Docker 容器
  3. 主应用程序将代码发送到特殊容器,其中包含表示预期输出的文件
  4. 特殊容器编译、执行并将代码输出打印到文件,并使用diff输出expected_output
  5. 特殊容器将 diff 结果(基本上是 true 或 false)发送到主应用程序

这样,与用户发送的代码相关的所有内容都会被隔离,因此更安全。

一些注释:

  • 为了安全起见,运行用户代码的容器应使用低权限用户来运行它
  • 如果您需要从代码中获取输出,而不仅仅是从差异中获取真或假,那么您需要确保他的代码不会生成恶意软件作为输出,并将其保存在文件中并放入主应用服务器
  • 阻止用户代码访问线程库、网络、文件系统等,有助于提高安全性

本篇关于《最佳实践:在服务器上执行不受信任的可执行文件》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>