【发布时间】:2010-12-19 06:54:44
【问题描述】:
在nodejs 中,执行外部命令的唯一方法是通过 sys.exec(cmd)。我想调用一个外部命令并通过标准输入给它数据。在nodejs中,似乎还没有一种方法可以打开命令然后将数据推送到它(仅用于执行并接收其标准+错误输出),所以我现在必须这样做的唯一方法是通过单个字符串命令,例如:
var dangerStr = "bad stuff here";
sys.exec("echo '" + dangerStr + "' | somecommand");
此类问题的大多数答案都集中在 nodejs(它使用 Google 的 V8 Javascript 引擎)中对我不起作用的正则表达式或 Python 等其他语言的本机功能。
我想逃避 dangerStr 以便可以安全地编写像上面那样的 exec 字符串。如果有帮助,dangerStr 将包含 JSON 数据。
【问题讨论】:
-
对于 Bourne 类型的 shell,您可以使用以下算法安全地转义字符串:1) 将所有出现的单引号 (') 替换为四个字符序列单引号、反斜杠、单引号、单引号('\'') 2) 在修改后的字符串的开头和结尾添加一个额外的单引号。前导单引号和尾随单引号的编码效率不高,但它仍然有效——当它可能只是 \' 时,' 变成了 ''\'''。
-
为了澄清:我花了一点时间来理解@ChrisJohnsen 的建议,但它检查出来了。如果您想在 shell 上使用
don't do that,请使用echo 'don'\''t do that'生成don't do that。 -
在python中,这里实现github.com/python/cpython/blob/…
-
嗯,这是很久以后的事了,不过你也可以使用
child_process模块...
标签: javascript shell escaping node.js v8