Con*_*ens 13 command-line json
以下危险吗?
$ myscript '<somejsoncreatedfromuserdata>'
Run Code Online (Sandbox Code Playgroud)
如果是这样,我该怎么做才能使它不危险?
我意识到这可能取决于shell,OS,用于进行系统调用的实用程序(如果在编程语言中完成)等等.但是,我只想知道应该注意哪些事情.
小智 15
是.这很危险.
JSON可以在字符串值中包含单引号(它们不需要转义).请参阅json.org上的 "轨道" .
想象一下数据是:
{"pwned": "you' & kill world;"}
Run Code Online (Sandbox Code Playgroud)
快乐的编码.
我会考虑将数据输入到有问题的程序中(例如,使用"popen"甚至"exec"直接传递参数的版本) - 例如,这可以避免因通过shell而导致的问题.就像SQL一样:使用占位符消除了使用"转义"的必要性.
如果通过shell是唯一的方法,那么这可能是一个选项(它没有经过测试,但类似的东西适用于"<script>"上下文):
对于JSON中的每个字符,它在ASCII中的"space"到"〜"的范围之外,或者''在shell 的上下文中具有特殊含义,例如\和'(但不包括"或任何其他字符 - 例如数字 - 可以出现在 "字符串"数据之外,这是这种简单方法的限制),然后使用\uXXXXJSON表单对字符进行编码.(根据上面定义的限制,这应该只编码出现在JSON中"字符串"中的潜在有害字符,并且不应该有\\对,没有尾随\,也没有's等)