我有一个小的应用程序,它通过执行一个进程来处理http请求,并从用户提供请求的查询字符串中提供一些输入。我想知道什么是过滤远程执行输入的最佳方法。例如,PHP的替代方案如下: http://php.net/manual/en/function.escapeshellarg.php
现在输入应该是有效的URL,如果这样可以更容易,但理想情况下,首选的过滤器将是首选。
答案 0 :(得分:4)
一般来说,像这样的神奇功能很难做到,如果你严重依赖它们,它们通常会让你的应用程序受到攻击。
我建议您使用智能URL /请求方案来获取运行所需的命令,并在用户请求和shell执行之间进行一定程度的解释,因此不会直接使用用户给出的参数。 / p>
您可以获取包含?verbose=true
的请求,并在命令行上将其翻译为-v
,例如。当处理用户输入(如需要直接赋予正在运行的命令的字符串)时,您需要使用引号进行简单的转义(通过简单的检查以查看输入是否包含引号)以确保您不会遇到" Bobby Tables"问题
另一种方法是让您的程序和底层命令通过管道或文件交换数据,例如。这会降低命令输入开放攻击向量的可能性。