Ответ 1
Да. Это опасно.
JSON может включать одинарные кавычки в строковых значениях (они не должны быть экранированы). Смотрите "дорожки" на json.org.
Представьте, что данные:
{"pwned": "you' & kill world;"}
Счастливое кодирование.
Я бы рассмотрел возможность подключения данных к рассматриваемой программе (например, используйте "popen"
или даже версию "exec"
, которая напрямую передает аргументы) - это может избежать проблем, возникающих в результате прохождения через оболочку, например, Так же, как и с SQL: использование заполнителей исключает необходимость путаницы с "экранированием".
Если передача через оболочку является единственным способом, то это может быть опция (она не проверена, но что-то похожее для контекста "<script> " ):
Для каждого символа в JSON, который находится за пределами диапазона "пробел" до "~" в ASCII, или имеет особый смысл в контексте ''
оболочки, такой как \
и '
(но исключая "
или любой другой символ - например, цифры - которые могут отображаться вне "строковых" данных, что является ограничением этого тривиального подхода), затем закодируйте символ, используя форму \uXXXX
JSON. (В соответствии с ограничениями, указанными выше, это должно только кодировать потенциально опасные символы, появляющиеся в "строках" в JSON, и не должно быть пар \\
, нет конечных \
и no '
s и т.д.)