Когда вы разрабатываете web-приложение, заранее зная, что оно будет находиться за балансировщиком нагрузки, следует учитывать ряд особенностей. Примером может служить запуск сайта в Docker кластере (например Swarm).

Что меняется?

Если ваше приложение попробует определить:

  • имя хоста,
  • протокол: http или https,
  • IP адрес клиента,

В этом посте я хочу рассказать о том, что такое CSRF (Cross-Site Request Forgery) атака и как от нее защититься.

Акт 1

Представим себе сайт интернет банкинга какого-нибудь выдуманного банка. Клиент этого банка вполне легальным образом логинится на сайте, выполняет ряд операций и закрывает страницу не сделав выход. После этой операции в браузере клиента осталась кука.

Клиент обманным путем попадает на сайт мошенников, которые отправляют AJAX запрос на сайт интернет банкинга с запросом о переводе некой суммы денег на счет мошенников. Так как в браузере осталась кука с сайта интернет банкинга, то она любезно прикрепляется браузером к запросу мошенников. Всё.