Безопасность очищенного пользовательского контента, обслуживаемого с помощью firebase - PullRequest
0 голосов
/ 23 мая 2018

Сначала я опишу в каждом конкретном случае:

Я создаю приложение, используя 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?Это безопасно?Есть ли способ обмануть угловое приложение, когда контент проверяется непосредственно перед подачей?Если да, можете ли вы показать мне пример и сказать, как справиться с этим делом?

1 Ответ

0 голосов
/ 24 мая 2018

Запустите содержимое через DOMPurify, прежде чем добавить его в DOM (через угловой).Это гарантирует, что HTML-код статичен (не содержит активного кода), а DOMPurify был создан одними из лучших в мире исследователей XSS.https://github.com/cure53/DOMPurify

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