Как защитить веб-API от CSRF-атаки, если она вызывается из междоменного клиента?

У меня есть веб-API, который вызывается междоменным клиентским приложением, разработанным на angular. Как я могу защитить свой веб-API от атаки CSRF.

Я использую аутентификацию на основе токенов

Я просмотрел следующую статью Майка Уоссона https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks

Но в приведенном выше случае также клиентский и веб-api работают в одном домене, если он в другом домене, как мы можем передать AntiForgeryToken?


person niknowj    schedule 13.10.2017    source источник


Ответы (1)


Как насчет создания конечной точки, которую вы можете запросить, когда ваше приложение начнет получать токены? Затем отправляйте их вместе с каждым будущим запросом из приложения angular.

public class AntiForgeryController : ApiController
{
    [HttpGet]
    public IHttpActionResult Get()
    {
        string cookieToken;
        string formToken;
        AntiForgery.GetTokens(null, out cookieToken, out formToken);

        return Ok(new {cookieToken, formToken});
    }
}
person peco    schedule 13.10.2017
comment
Злоумышленник также узнает об этом вызове, тогда он может просто позвонить и передать это значение вместе с запросом, верно? - person niknowj; 17.10.2017
comment
Конечно, это возможно. Вам нужно будет сделать так, чтобы для этой конечной точки требовался какой-то тип аутентификации. - person peco; 17.10.2017