FixVibe
Covered by FixVibehigh

Защита на CSRF: Защита срещу неразрешени промени в състоянието

Фалшифицирането на междусайтови заявки (CSRF) остава значителна заплаха за уеб приложенията. Това изследване изследва как съвременните рамки като Django прилагат защита и как атрибутите на ниво браузър като SameSite осигуряват защита в дълбочина срещу неупълномощени заявки.

CWE-352

Въздействие

Cross-Site Request Forgery (CSRF) позволява на хакер да подмами браузъра на жертвата да извърши нежелани действия на различен уебсайт, където жертвата в момента е удостоверена. Тъй като браузърите автоматично включват заобикалящи идентификационни данни като бисквитки в заявки, атакуващият може да фалшифицира операции за промяна на състоянието - като промяна на пароли, изтриване на данни или иницииране на транзакции - без знанието на потребителя.

Първопричина

Основната причина за CSRF е поведението по подразбиране на уеб браузъра за изпращане на бисквитки, свързани с домейн, когато се направи заявка към този домейн, независимо от произхода на заявката [S1]. Без конкретно потвърждение, че дадена заявка е умишлено задействана от собствения потребителски интерфейс на приложението, сървърът не може да направи разлика между легитимно потребителско действие и фалшиво.

Django CSRF защитни механизми

Django предоставя вградена защитна система за смекчаване на тези рискове чрез интегриране на междинен софтуер и шаблон [S2].

Активиране на мидълуер

django.middleware.csrf.CsrfViewMiddleware е отговорен за CSRF защитата и обикновено е активиран по подразбиране [S2]. Той трябва да бъде позициониран преди всеки мидълуер за изглед, който предполага, че CSRF атаките вече са обработени [S2].

Внедряване на шаблон

За всички вътрешни POST формуляри разработчиците трябва да включат етикета {% csrf_token %} в елемента <form> [S2]. Това гарантира, че в заявката е включен уникален таен токен, който след това сървърът проверява спрямо сесията на потребителя.

Рискове от изтичане на токени

Критичен детайл при изпълнението е, че {% csrf_token %} никога не трябва да се включва във формуляри, насочени към външни URL адреси [S2]. Ако направите това, тайният CSRF токен ще изтече на трета страна, потенциално компрометирайки сигурността на сесията на потребителя [S2].

Защита на ниво браузър: Бисквитки SameSite

Съвременните браузъри са въвели атрибута SameSite за заглавката Set-Cookie, за да осигурят слой на защита в дълбочина [S1].

  • Строго: Бисквитката се изпраща само в контекст на първа страна, което означава, че сайтът в URL лентата съответства на домейна на бисквитката [S1].
  • Лакс: Бисквитката не се изпраща при подзаявки между сайтове (като изображения или рамки), а се изпраща, когато потребител навигира до изходния сайт, като например следвайки стандартна връзка [S1].

Как FixVibe го тества

FixVibe вече включва CSRF защита като затворена активна проверка. След проверка на домейна, active.csrf-protection инспектира открити формуляри за промяна на състоянието, проверява за въведени данни с форма на CSRF-токен и сигнали за бисквитки SameSite, след което прави опит за изпращане с подправен произход с ниско въздействие и докладва само когато сървърът го приеме. Проверките на бисквитките също маркират слаби атрибути на SameSite, които намаляват CSRF защитата в дълбочина.