На каком этапе защищаться от xss: Api или Front?

Есть сайт, на котором начали добавлять модули front (на angular) и api (php). Встал вопрос, а на каком уровне лучше защищаться от xss? Разработчики бэка и фронта переводят друг на друга.

Доводы в этом вопросе (B = back, api, F = front):

  1. B: api должна передовать то что ей передали и не искажать данные. Защищаться должна только от прямого нарушения работоспособности api.
  2. B: с api могут работать не только web технологии, которым может быть безраличны теги, но чувствительна к другим уязвимостям, которые могут исказить работу web. Т.е. api не должна подстраиваться под всех клиентов, с которыми она работает.
  3. F: front должен работать с данными которые пришл
  4. F: по api должны передаваться чистые данные без html тегов

Ответы (1 шт):

Автор решения: Alex Krass

Приложение на фронте выполняется под управление пользовательского компьютера и теоретически этот пользователь может делать с ним всё, что захочет. В том числе вообще минуя фронт отправлять запросы напрямую к API, только куки подставить. Взять какой-нибудь Telerik Fiddler и вперед. Поэтому защита встраивается на бек, а не отдается на откуп того, что пользователь не в состоянии сломать фронт. Так же работает валидация, её встраивают на беке, даже если на фронте она есть и дублируется.

Так же по последнему комментарию, никто не запрещает передавать через API всякие HTML теги, типичный пример в WYSIWYG редакторах. Просто их надо фильтровать, вырезая всякие XSS-подозрительные теги на типа <script> или <iframe> во время записи.

→ Ссылка