Безопасно ли использовать JSON в качестве аргумента командной строки или его необходимо сначала очистить? - PullRequest
13 голосов
/ 29 апреля 2011

Опасно ли следующее?

$ myscript '<somejsoncreatedfromuserdata>'

Если так, что я могу сделать, чтобы это не опасно?

Я понимаю, что это может зависеть от оболочки, ОС, утилиты, используемой для системных вызовов (если это делается внутри языка программирования) и т. Д. Однако я просто хотел бы знать, на какие вещи следует обращать внимание для.

1 Ответ

15 голосов
/ 29 апреля 2011

Да.Это опасно.

JSON может включать одинарные кавычки в строковые значения (их не нужно экранировать).Смотрите "следы" на json.org .

. Представьте, что данные:

{"pwned": "you' & kill world;"}

Счастливое кодирование.


Я бырассмотрите возможность передачи данных в соответствующую программу (например, используйте "popen" или даже версию "exec", которая передает аргументы напрямую) - это может избежать проблем, возникающих, например, при прохождении через оболочку.Как и в SQL: использование заполнителей устраняет необходимость в мелочах с «экранированием».


Если прохождение через оболочку является единственным способом, тогда это может быть вариантом (это не проверено, но что-тоаналогично для контекста ""):

Для каждого символа в JSON, который находится вне диапазона от "пробела" до "~" в ASCII или имеет особое значение в '' контекст оболочки, такой как \ и ' (но исключая " или любой другой символ - например, цифры), который может появляться вне «строковых» данных, которыеявляется ограничением этого тривиального подхода), затем закодируйте символ с помощью формы \uXXXX JSON.(В соответствии с определенными выше ограничениями, это должно кодировать только потенциально опасные символы, появляющиеся в «строках» в JSON, и не должно быть пар \\, ни конечных \, ни ' s и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...