Безопасная дезинфекция загруженного пользователем json в рельсы - PullRequest
0 голосов
/ 16 июня 2019

У меня есть страница на моем сайте, которая ожидает, что некоторый пользовательский 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.

Какой вариант кажется лучшим и наиболее безопасным?Я пропускаю более простое решение здесь?

1 Ответ

1 голос
/ 17 июня 2019

Я думаю, что лучшим вариантом является проверка структуры JSON при загрузке.Это дает пользователю возможность исправить свой JSON.И вы не храните недопустимые данные.

Кроме того, вы можете использовать гемы, такие как json-schema , чтобы проверить не только достоверность, но и структуру JSON.

...