Короче, нет.То, как вы пытаетесь сделать защиту CSRF, подвергает вас CSRF, поскольку ваша конечная точка csrf/get
не защищена от CSRF.
По сути, вам необходимо защитить себя от двух основных векторов атаки: XSS и CSRF.
CSRF
CSRF включает ваш сайт и вредоносный сайт, который будет пытаться делать аутентифицированные запросы на ваш сайт.Если есть способ запросить токен CSRF с вредоносного сайта, вы не защищены.Обычные методы защиты от CSRF - возврат токена из вашего вызова API аутентификации и сохранение этого токена в сеансе браузера. Проблема этого метода заключается в том, что он открывает доступ к XSS .
XSS
Межсайтовый скриптинг или уязвимости XSS связаны с внешними скриптами, работающими на вашей странице.,Сюда входят потенциально вредоносные сценарии, вставленные злоумышленником.
Локальное хранилище и хранилище сеансов небезопасны, поэтому, например, не следует хранить токен в обычных файлах cookie.
Чтобы быть в безопасности от атак XSS Ваш ответ для аутентификации может хранить куки, которые javascript не может прочитать, используя HttpOnly
куки.
Итак, используя токен, который выstore with javascript защищает вас от CSRF, но открывает вас до XSS, где использование cookie-файла сеанса защищает вас от XSS, но открывает вас до CSRF.
Защита вашего API от XSS и CSRF
Решение состоит в том, чтобы использовать оба подхода: ваш API аутентификации должен установить файл cookie HttpOnly
для защиты от XSS и вернуть токен для защиты от CSRF.
Обратите внимание, что csrf/get
не требуетсяapi, поскольку токен должен быть возвращен методом аутентификации: вы хотите отправить этот токен только в обмен на действительные учетные данные.Не забудьте также отправлять и проверять один и тот же токен на всех аутентифицированных вызовах API .
Вот отличная статья, объясняющая безопасность API, почему и как это сделать более подробно: http://www.redotheweb.com/2015/11/09/api-security.html