Проверка схемы JSON в упакованном приложении Chrome

Я пытаюсь использовать AJV средство проверки схемы JSON в своем приложении Chrome. Но я получаю ошибку

EvalError: Отказано в оценке строки как JavaScript, поскольку «unsafe-eval» не является разрешенным источником сценария в следующей директиве политики безопасности контента: «default-src 'self' blob: filesystem: chrome-extension-resource:».

Это происходит во время выполнения

var validate = ajv.compile(schema);

Насколько я понимаю, AJV использует динамическую генерацию кода и eval() для проверки JSON, что запрещено CSP.

Есть ли способ использовать AJV в приложениях Chrome?

Или есть какой-то другой валидатор схемы JSON, который можно использовать в приложениях Chrome?


person anton.mo    schedule 13.01.2016    source источник


Ответы (2)


Если какая-то библиотека, которую вы хотите использовать, несовместима с Chrome CSP, вы можете использовать ее в песочнице< /а>.

Это хорошо задокументировано и имеет конкретный пример и целая отдельная статья "Использование eval в расширениях Chrome. Безопасно."

Недостатком является то, что вы не можете написать код, который использует API Chrome и библиотеку. Вам нужно разделить это и общаться между двумя скриптами.

person Xan    schedule 14.01.2016
comment
Конкретный пример мне очень помог. Спасибо. - person anton.mo; 18.01.2016

Недавно я реализовал возможность предварительной компиляции схем в отдельные модули с помощью ajv-cli. Таким образом, вы можете полностью избежать использования генерации кода и конструктора функций, поэтому вы просто будете соблюдать свой CSP.

Несмотря на наличие ограничений по сравнению с тем, что можно сделать с помощью самого Ajv, в большинстве случаев покрыты.

person esp    schedule 20.10.2016
comment
Обновлены ограничения для ajv 7+: github .com/ajv-validator/ajv/blob/master/docs/ - person Carl G; 17.05.2021