我有一个 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/