IPC :: System :: Simple Capturex如何工作?

问题描述 投票:1回答:1

documentationcapurex,指出函数从不调用shell

我的假设:由于未调用任何外壳程序,因此*;之类的字符将不会被解释,因此不会造成伤害。这就是为什么对外部程序的调用不会(或更少)容易受到意外格式错误的输入或预期的注入攻击的影响,如下面的屏幕快照所示(对德文输出消息感到抱歉):

capturex vs backticks

我的问题:

  1. 可用什么术语来描述,如何用capturex执行代码?在其他语言或环境中使用的示例/技术/术语是什么? (例如system call?)

  2. 实际上建议在不进行输入检查的情况下使用此技术(我假设不是),否则,出于什么原因(攻击向量)?

非常感谢您的时间!

perl
1个回答
0
投票

了解capturex的最佳方式是查看its source

子程序使用列表中给出的命令实现自己的管道打开,以解决(古代!)v5.6.x的限制。简而言之,它是通过fork-使用piped open进行处理,然后“手动” exec-从子级执行命令来实现的,在此可以使用列表形式。然后在父级中读取输出。跟随open页面中的“管道”一词。

因此不会涉及任何shell,因为LIST形式的exec使用execvp(3)直接运行命令。 (如果它不包含任何外壳程序元字符,则也可以使用单个参数。)因此,在外壳程序中具有特殊含义的字符可以自由用作文字字符。

关于第二个问题-如果命令是由用户输入形成的,则必须始终仔细检查[[真的!请注意,不应从字面上使用输入,而应支持程序组成命令所依据的关键字。

注入错误更多是编程错误,变量插入不正确会导致意外的命令;那里不需要进行恶意行为,只需暴露该错误的“正确”输入即可。
© www.soinside.com 2019 - 2024. All rights reserved.