Как вы предотвращаете атаки CSRF от клиентов без файлов cookie в веб-API ASP.NET?

Я создаю службу ASP.NET Web API 2 в качестве RESTful API для поддержки мобильных приложений.

Проблема заключается во всех статьях в Интернете о CSRF, включая:

Все говорят о проверке на основе файлов cookie против CSRF.

Мне нужно поместить такой файл cookie в свое мобильное приложение, и мало того, он должен быть предварительно загружен, чтобы приложение сразу заработало. Есть ли способ внедрить такие методы защиты от CSRF без установки файлов cookie? Или, может быть, есть способ предварительно загрузить файл cookie безопасности в мобильное приложение, чтобы мы могли сразу использовать его без этапа настройки файла cookie?


person Jon Limjap    schedule 04.07.2014    source источник


Ответы (1)


Ответ: В этом нет необходимости.

Вам нужно будет защитить свой веб-API с помощью какого-либо механизма аутентификации (предположительно), и я рекомендую сделать ваш API доступным только через HTTPS. Также рекомендуется реализовать HSTS.

Атака CSRF может произойти только тогда, когда файлы cookie передаются на клиенте. Под этим я подразумеваю, что клиент имеет доступ к файлам cookie из нескольких доменов (например, веб-браузер хранит файлы cookie для каждого посещаемого вами сайта). Однако клиент API веб-приложения обычно связывается только с одним доменом (доменным вашего API). Любая межсайтовая атака не может использовать файлы cookie в вашем API, поскольку клиент не является общим (HTTP-клиент в веб-приложении отделен от HTTP-клиента в мобильном браузере — или должен быть). Поэтому API вашего веб-приложения уже должен быть защищен от CSRF, если API предназначен только для вашего мобильного приложения.

Обратите внимание, что согласно комментарий Jaxidian, вышеприведенное предполагает, что файлы cookie используются в качестве механизма управления сеансом, а не механизм, ориентированный на HTTP (например, базовая аутентификация, NTLM или Kerberos).

person SilverlightFox    schedule 05.07.2014
comment
Я подозревал, что это так. Есть люди, которые настаивают на том, что это возможно, но не продемонстрировали мне хорошую демонстрацию, в отличие от гипотетических сценариев. Проблема, конечно, в том, что эти люди являются вашими клиентами. - person Jon Limjap; 06.07.2014
comment
SilverlightFox, можете ли вы дать несколько хороших механизмов аутентификации? - person FireShock; 09.07.2014
comment
Допустим, у меня есть вызов API POST: https://server.com/FireEmployees?FirstName=Bob, который запускает всех Бобов в компании. Допустим, он использует аутентификацию Windows, а приложения WinForms обычно используют этот веб-сервис, и только супермощный генеральный директор имеет право увольнять этих бобов. Теперь, что помешает веб-приложению обманом заставить генерального директора выполнить вышеупомянутый POST? Токены CSRF, как правило, защищают это, но этот ответ на вопрос говорит, что его нужно игнорировать. Мне это кажется неправильным. - person Jaxidian; 04.09.2015
comment
@Jaxidian: Интересный момент, хотя я бы не рекомендовал использовать встроенную аутентификацию Windows для использования с мобильным API. - person SilverlightFox; 04.09.2015