shell - 使用 Golang 安全执行命令(避免远程执行)

标签 shell go exploit

我有一个 go 中的小应用程序,它通过执行一个进程并向其提供用户在请求中提供的查询字符串的一些输入来处理 http 请求。我想知道过滤远程执行输入的最佳方法是什么。例如,PHP 的替代方案如下: http://php.net/manual/en/function.escapeshellarg.php

现在,输入应该是有效的 URL(如果这样更容易),但理想情况下,首选通用过滤器。

最佳答案

一般来说,像这样的神奇函数很难正确使用,如果您严重依赖它们,它们通常会让您的应用程序容易受到攻击。

我建议您使用智能 URL/请求方案来获取需要运行的命令,并在用户请求和 shell 执行之间进行一定程度的解释,这样就不会直接使用用户给出的参数。

您可以获取包含 ?verbose=true 的请求,并将其在命令行上转换为 -v,例如。当处理用户输入(例如需要直接提供给正在运行的命令的字符串)时,您需要使用引号进行简单的转义(通过简单的检查来查看输入是否包含引号),以确保您不会遇到“Bobby”表”问题。

另一种方法是让您的程序和底层命令通过管道或文件交换数据,例如。这将降低命令输入成为开放攻击向量的可能性。

关于shell - 使用 Golang 安全执行命令(避免远程执行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23797313/

相关文章:

bash - bash 中的状态栏

c - 利用缓冲区溢出读取操作

json - 如何解码 Json 中的多值/单值

javascript - Facebook 垃圾邮件代码说明

c - 使用 fgets() 对 C 程序进行利用

linux - 执行 bash 的 Perl 转义参数

外部脚本函数上的 bash 命令替换收到不正确的退出状态

linux - 如何在shell脚本中获取单行数据

go - 如何使用 Go 获得最近的城市地理坐标?

Golang TCP 服务器给出 "dial tcp 127.0.0.1:9999: connect: connection refused"错误