У меня есть страница на моем сайте, которая ожидает, что некоторый пользовательский JSON будет проанализирован в Javascript.
Я пытаюсь придумать лучший способ очистки JSON, чтобы он не мог иметь XSS
Самое простое решение, позволяющее пользователям загружать JSON, таково:
var someJSON = <%= @my_object.json_blob.html_safe %>;
Однако это небезопасно, поскольку json_blob
был загружен пользователем, поэтомуможет иметь код Javascript и быть недопустимым JSON.
Следующий вариант, о котором я подумал, был следующим:
var someJSON = <%= JSON.parse(@my_object.json_blob).to_json.html_safe %>;
Я думаю, что это абсолютно безопасно, поскольку теперь он должен быть действительным JSON, а неJavascript код.Прав ли я в этом?
Проблема этого подхода заключается в том, что он очень неинтуитивен и требует преобразования его в хеш, а затем обратно в JSON вместо простой проверки правильности JSON.
Наконец, я мог бы также проверить, что JSON действителен перед загрузкой, и загружать в базу данных только в том случае, если это допустимый JSON.Таким образом, мне не нужно будет выполнять проверку в файле ERB.
Какой вариант кажется лучшим и наиболее безопасным?Я пропускаю более простое решение здесь?