Сначала я опишу в каждом конкретном случае:
Я создаю приложение, используя angular и firebase.Angular клиент имеет ввод, где пользователь может написать некоторый пользовательский контент, и я хотел, чтобы этот контент достиг текста aka markdown / html, чтобы разрешить ссылки , полужирный , курсив и т. Д.
Содержимое этого ввода сохраняется в базе данных Firebase, а затем загружается обратно другим пользователям - в основном вы можете представить это как простой случай вопроса переполнения стека.
Поскольку мы знаем, что любой контент, обслуживаемый клиентом, небезопасен, это означает, что возможно создать XSS-атаку, если бэкэнд не очистит содержимое этого сообщения.Обслуживание любого сообщения из firebase может быть опасным, но поскольку я использую угловые скобки, то содержимое моего {{ message }}
должно быть экранировано, и сообщение должно выглядеть так: my message and <script> evilScript(); </script>
должно быть отправлено как есть.
Теперь давайтескажем, мы используем не текстовые сообщения, а HTML или уценку.В этом случае совершенно нормально видеть контент вроде:
**hello** it is me
<strong>hello</strong> it is me
, но на этот раз я не могу его обслуживатькак есть.Я не могу разрешить обслуживать чистый HTML, потому что это небезопасно для конечного пользователя.В случае уценки я должен сначала преобразовать его в HTML, так что это почти тот же случай (за исключением того, что я просто делаю один дополнительный шаг).Проще говоря, в этом случае я сначала должен очистить сообщение.
Как с этим справиться?
Поскольку firebase просто хранит информацию в базе данных, я могу защитить свое приложение только в угловом клиенте конечного пользователя.В этом случае это хорошая идея для дезинфекции пользовательских сообщений именно тогда, когда они приходят с firebase?Это безопасно?Есть ли способ обмануть угловое приложение, когда контент проверяется непосредственно перед подачей?Если да, можете ли вы показать мне пример и сказать, как справиться с этим делом?