На каком этапе защищаться от xss: Api или Front?
Есть сайт, на котором начали добавлять модули front (на angular) и api (php). Встал вопрос, а на каком уровне лучше защищаться от xss? Разработчики бэка и фронта переводят друг на друга.
Доводы в этом вопросе (B = back, api, F = front):
- B: api должна передовать то что ей передали и не искажать данные. Защищаться должна только от прямого нарушения работоспособности api.
- B: с api могут работать не только web технологии, которым может быть безраличны теги, но чувствительна к другим уязвимостям, которые могут исказить работу web. Т.е. api не должна подстраиваться под всех клиентов, с которыми она работает.
- F: front должен работать с данными которые пришл
- F: по api должны передаваться чистые данные без html тегов
Ответы (1 шт):
Приложение на фронте выполняется под управление пользовательского компьютера и теоретически этот пользователь может делать с ним всё, что захочет. В том числе вообще минуя фронт отправлять запросы напрямую к API, только куки подставить. Взять какой-нибудь Telerik Fiddler и вперед. Поэтому защита встраивается на бек, а не отдается на откуп того, что пользователь не в состоянии сломать фронт. Так же работает валидация, её встраивают на беке, даже если на фронте она есть и дублируется.
Так же по последнему комментарию, никто не запрещает передавать через API всякие HTML теги, типичный пример в WYSIWYG редакторах. Просто их надо фильтровать, вырезая всякие XSS-подозрительные теги на типа <script> или <iframe> во время записи.