Веб-API и токен Anitforgery с Angularjs
Чтобы избежать xss-атаки, MVC генерирует некоторый токен против подделки.
Но в нашем проекте у нас есть Angularjs с веб-API.
Моя потребность
- Нужен ли токен подделки для предотвращения xss-атаки в проекте Angularjs с веб-интерфейсом?
- Если нам нужно, как реализовать?
1 ответ
Маркер защиты от подделки против подделки межсайтовых запросов (CSRF). В очень кратком и несколько упрощенном виде злоумышленник может настроить свой собственный веб-сайт, обманом заставить вашего пользователя посетить этот веб-сайт, а затем создать веб-страницу для пользователя, которая заставит браузер пользователя отправлять действительный запрос в ваше приложение, что-то вроде этого. ваш пользователь не хотел делать. Стандартная защита от этого - генерирование случайного токена в вашем приложении, который злоумышленник не узнает и не сможет отправить. OWASP имеет хорошее описание CSRF, а также защитную шпаргалку. Эта проблема возникает, только если информация аутентификации (идентификатор сеанса или токен доступа) автоматически отправляется браузером с запросами, т.е. когда это в печенье. В противном случае атака невозможна.
Это не имеет ничего общего с межсайтовым скриптингом (xss). Злоумышленник может захотеть внедрить Javascript на вашу страницу при просмотре другими пользователями, чтобы он мог получить доступ к данным, отображаемым или сохраненным на клиенте жертвами пользователей. Чтобы решить эту проблему, вам нужно закодировать весь вывод в соответствии с его контекстом, или в Angular (и Javascript в целом) вам нужно убедиться, что вы используете только привязки, которые могут не создавать узел сценария на странице dom, а только привязываться как текст, У OWASP также есть шпаргалка для XSS.
В случае разговора Angular с Web API вам нужно позаботиться о CSRF в коде Web API, если (и только если) вы используете аутентификацию / сеансы на основе файлов cookie. Если токен доступа хранится где-либо еще, и вам необходимо вставить его в каждый запрос в коде (как, например, токен хранится в объекте Javascript и добавляется в каждый запрос в качестве заголовка запроса с помощью jQuery), это нормально, и вы не не нужна дополнительная защита от CSRF.
Если Web API обслуживает контент JSON, то хорошо иметь некодированные данные в ответах JSON (очевидно, это означает, что вы должны кодировать данные для самого JSON, но стандартные сериализаторы делают это за вас, и вам не нужно заботиться о представлении на этом уровне). Когда такие данные поступают в Angular, вам нужно убедиться, что вы используете только надежные привязки, чтобы фактически связать эти данные с пользовательским интерфейсом, чтобы Javascript не мог быть вставлен. Angular достаточно хорош в этом, но код все еще может быть уязвим. Также DOM XSS (форма XSS) является очень распространенной уязвимостью в приложениях с интенсивным использованием Javascript.
Как именно это реализовать, к сожалению, далеко за рамками ответа. Все зависит от деталей.