JSON可以安全地用作命令行参数,还是需要先对其进行清理?

JSON可以安全地用作命令行参数,还是需要先对其进行清理?,json,command-line,Json,Command Line,以下情况危险吗 $ myscript '<somejsoncreatedfromuserdata>' $myscript'' 如果是这样,我能做些什么使它不危险 $ myscript '<somejsoncreatedfromuserdata>' 我意识到这可能取决于shell、操作系统、用于进行系统调用的实用程序(如果是在编程语言中进行的)等。但是,我只想知道我应该注意哪些事情。是的。这很危险。 JSON可以在字符串值中包含单引号(它们不需要转义)。请参见第页的“

以下情况危险吗

$ myscript '<somejsoncreatedfromuserdata>'
$myscript''
如果是这样,我能做些什么使它不危险

$ myscript '<somejsoncreatedfromuserdata>'

我意识到这可能取决于shell、操作系统、用于进行系统调用的实用程序(如果是在编程语言中进行的)等。但是,我只想知道我应该注意哪些事情。

是的。这很危险。

JSON可以在字符串值中包含单引号(它们不需要转义)。请参见第页的“轨迹”

假设数据是:

{"pwned": "you' & kill world;"}
快乐编码


我会考虑将数据导入到程序中(例如,使用<代码>)POPON“或甚至版本<代码>”Exc] 直接传递参数),例如,这可以避免通过shell引起的问题。与SQL一样:使用占位符可以省去“转义”的麻烦


如果通过shell是唯一的方法,那么这可能是一个选项(未测试,但类似的内容适用于“”上下文):


对于JSON中的每个字符,它要么在ASCII中的“空格”到“~”范围之外,要么在shell的
'
上下文中具有特殊含义,例如
\
'
(但不包括
或任何其他可能出现在“字符串”之外的字符,例如数字)“数据,这是这种简单方法的一个限制),然后使用
\uxxx
JSON格式对字符进行编码。(根据上面定义的限制,这应该只对JSON中“字符串”中出现的潜在有害字符进行编码,并且不应该有
\\
对,不应该有尾随
\
,也不应该有
'
s等。)

没关系。只需转义用于包装字符串的字符:

'
应变为
'\'

所以JSON字符串

{“pwned”:“你”&kill world;“}
变成

{“pwned”:“你”\''&kill world;”}
在shell看来,您的最终命令是:

$myscript'{“pwned”:“你”\''&kill world;“}”

AFAIK,这不会有害,因为正确有效的JSON总是用括号括起来,直到并且除非您在命令行上运行JSON中的任何参数,否则您应该是安全的。您控制它的输入和处理吗?一旦接收到json对象,你会如何处理它?在这个理论示例中,一旦我得到输入,我就会丢弃它,或者用它做任何安全的事情。我只是想知道,JSON中的某些字段逃避引号并执行某种命令行注入攻击有多容易。酷豆。我实际上使用的是python子流程模块,所以我非常确定使用Popen类是安全的,但总体上还是很好奇。问题的关键是处理生成的输出,而不是在命令行上实际键入的内容。您必须首先通过sed或其他方法来完成此任务。