CSRF - Безопасно ли спрашивать об этом с помощью API? - PullRequest
0 голосов
/ 11 сентября 2018

Я использую сессионную CSRF на сайте, использующем Angular.Безопасно ли делать HTTP-вызов для запроса токена CSRF?

Например, если я отправил запрос с действительным сеансом пользователя на страницу / csrf / get и распечатал необработанный токен, достаточно ли этого безопасно для функциональности CSRF?Если нет, могу ли я что-нибудь сделать, чтобы сделать его более безопасным, сохраняя при этом функциональность поиска JSON?

Это будет первый вызов API перед всем остальным, и я оставлю его на локальном хранилище, чтобы использовать его на каждом httpзвоните

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Короче, нет.То, как вы пытаетесь сделать защиту 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

0 голосов
/ 29 октября 2018

Прежде всего, используйте https, http небезопасен.

Тогда лучше не использовать GET.

Безопасным способом является отправка токена в ответе на успешный запрос аутентификации (POST).

Для получения дополнительной информации, проверьте:

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

...