我正在实现wordexp
函数,该函数需要识别并可选地拒绝命令替换的出现(即$(...)
或反引号),并且从质量的角度来看,还应识别并拒绝未加引号每当禁用命令替换时,都会出现特殊字符|
,&
,;
,<
和>
。
我正在寻找的是一种识别这些特殊字符存在的简单方法,而无需复制大量的shell逻辑。有什么想法吗?
验证字符串后,我将其传递给sh
并带有以下-c
参数:
printf '%s\0' [string inserted here]
构建了一个很好的多字符串,可供C代码使用。
答案 0 :(得分:0)
这种方法似乎是正确的,但如果错误,我会欢迎更正:
如果未指定WRDE_NOCMD
标志,请不要进行任何检查。 wordexp
的规范说明了应用程序
应确保单词不包含不带引号的字符或任何未加引号的shell特殊字符......
当已经允许命令替换时,检查命令替换上下文之外的伪特殊字符肯定没有获得安全性好处。
现在,如果指定了WRDE_NOCMD
,则按顺序处理字符串,并保留一个标记,表明我们是在单引号还是双引号上下文中。
$(
没有立即跟随另一个(
会产生WRDE_CMDSUB
。WRDE_BADCHAR
。由于我们要禁止所有命令替换,因此不需要担心嵌套的$(
上下文;进入第一级已经产生错误。
我在这里犯过任何愚蠢(或微妙而不那么愚蠢)的错误吗?