仅调用旨在供程序使用的应用程序编程接口 (API)。通常,程序可以调用任何其他程序,包括那些实际上是为人类交互而设计的程序。然而,以人类交互的方式调用旨在供人类交互的程序通常是不明智的。问题在于,程序的人机界面有意地功能丰富,并且通常难以完全控制。正如在第 8.3 节中讨论的那样,交互式程序通常具有“转义”代码,这可能使攻击者能够执行不良功能。此外,交互式程序通常会尝试推断“最有可能”的默认值;这可能不是您期望的默认值,并且攻击者可能会找到利用此漏洞的方法。
通常不应直接调用的程序示例包括 mail、mailx、ed、vi 和 emacs。至少,在未先检查其输入的情况下,请勿调用这些程序。
通常,有一些参数可以为您提供更安全地访问程序功能的方式,或者有不同的 API 或应用程序旨在供程序使用;请改用这些。例如,与其调用文本编辑器来编辑一些文本(例如 ed、vi 或 emacs),不如在可以的地方使用 sed。