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

时间:2014-05-22 03:22:09

标签: shell go exploit

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

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

1 个答案:

答案 0 :(得分:4)

一般来说,像这样的神奇功能很难做到,如果你严重依赖它们,它们通常会让你的应用程序受到攻击。

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

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

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