Как предотвратявате CSRF атаки от клиенти без бисквитки в ASP.NET Web API?

Създавам услуга ASP.NET Web API 2 като RESTful API за поддръжка на мобилни приложения.

Проблемът е във всички статии в мрежата за CSRF, включително:

Всички говорят за базирано на бисквитки анти-CSRF валидиране.

Трябва да сложа такава бисквитка в мобилното си приложение и не само това, тя трябва да е предварително заредена, за да заработи приложението веднага. Има ли начин да се въведат такива методи за защита срещу CSRF, без да се налага да задавате бисквитки? Или може би има начин за предварително зареждане на бисквитка за сигурност в мобилно приложение, така че да можем незабавно да я използваме без стъпка за настройка на бисквитка?


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


Отговори (1)


Отговор: Не трябва да се налага.

Ще трябва да защитите вашия уеб API с някакъв механизъм за удостоверяване (вероятно) и препоръчвам да направите своя API достъпен само през HTTPS. Внедряването на HSTS също се препоръчва.

CSRF атака може да се случи само когато бисквитките се споделят на клиента. С това имам предвид, че клиентът има достъп до бисквитки от множество домейни (като уеб браузър, съхраняващ бисквитки за всеки сайт, който посещавате). Клиентът на API на уеб приложение обаче обикновено се свързва само с един домейн (този на вашия API). Всяка атака между сайтове не може да използва бисквитки във вашия API, тъй като клиентът не е споделен (HTTP клиентът в уеб приложението е отделен от HTTP клиента в мобилния браузър - или трябва да бъде). Следователно API на вашето уеб приложение вече трябва да е защитен срещу CSRF, ако API е само за вашето мобилно приложение.

Забележка, според Коментар на Jaxidian, горното предполага, че бисквитките се използват като механизъм за управление на сесии, а не ориентиран към 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, което задейства всички Bob в компанията. Да кажем, че използва Windows Authentication и WinForms приложенията обикновено консумират тази уеб услуга и само супер мощният главен изпълнителен директор е упълномощен да уволни тези Bobs. Сега какво ще попречи на уеб приложение да подмами изпълнителния директор да извърши горния POST? CSRF токените са склонни да защитават това, но този отговор на въпроса казва да го игнорирате. Това ми се струва грешно. - person Jaxidian; 04.09.2015
comment
@Jaxidian: Интересен момент, въпреки че не бих препоръчал използването на интегрирано Windows удостоверяване за използване с мобилен API. - person SilverlightFox; 04.09.2015