Что такое CSRF-атака?

Атака на подделку межсайтовых запросов (CSRF) основана на доверии веб-сайта к пользователю для выполнения несанкционированных запросов и/или транзакций. Например, предположим, что пользователь вошел в свой Joomla! интерфейс администратора веб-сайтов на одной вкладке и просматривает скомпрометированный сайт на другой вкладке. Простая CSRF-атака может быть запущена просто путем изменения элементов IMG в некоторых браузерах, чтобы они указывали на что-то вроде

http://some/joomla/site/administrator/index2.php?option=com_users&task=delete...

Когда пользователь просматривает скомпрометированный сайт, это изображение будет запрошено, и поскольку пользователь в настоящее время вошел в интерфейс администратора своего Joomla! сайте, поддельный запрос будет положительно аутентифицирован и выполнен. Чтобы предотвратить простые CSRF-атаки, подобные описанной выше, токены запросов были добавлены ко всем формам во интерфейсной и серверной части Joomla! интерфейсы. Токены представляют собой рандомизированные строки, которые используются для проверки того, что выполняемый запрос поступает из действительной формы и действительного сеанса. Эта простая мера очень эффективна для предотвращения большого процента потенциальных CSRF-атак, однако из-за природы CSRF их чрезвычайно трудно, если не невозможно, полностью обезопасить.

Защита От CSRF-Атак.

Joomla! пытается защитить от CSRF путем вставки случайной строки, называемой токеном, в каждую форму POST и в каждую строку запроса GET, которая может что-то изменить в Joomla! система. Эта случайная строка обеспечивает защиту, поскольку скомпрометированному сайту необходимо не только знать URL целевого сайта и допустимый формат запроса для целевого сайта, но и знать случайную строку, которая изменяется для каждого сеанса и каждого пользователя.

В Joomla! Фреймворк позволяет вам легко включать такую защиту и в ваши компоненты. Это просто реализовать как в запросах POST, так и в запросах GET.

POST-запрос.

Запросы POST отправляются в формате HTML с использованием форм. Чтобы добавить токен в свою форму, добавьте следующую строку внутри своей формы:

<?php echo JHtml::_( 'form.token' ); ?>

В Joomla 4

use Joomla\CMS\HTML\HTMLHelper;
<?php echo HTMLHelper::_('form.token'); ?>

Это приведет к выводу чего-то вроде следующего:

<input type="hidden" name="1234567890abcdef1234567890abcdef" value="1" />

GET-запрос.

Запросы GET отправляются в формате HTML с использованием строк запроса. Чтобы добавить токен в строку запроса, используйте URL-адрес, например:

<?php 
echo JRoute::_( 'index.php?option=com_example&controller=object1&task=save&'. 
   JSession::getFormToken() .'=1' ); 
?>

 В Joomla 4.

use Joomla\CMS\Router\Route;
use Joomla\CMS\Session\Session;
<?php 
echo Route::_( 'index.php?option=com_example&controller=object1&task=save&'. 
   Session::getFormToken() .'=1' ); 
?>

Это сгенерирует URL-адрес с токеном в строке запроса.

Проверка токена.

После того, как вы включили токен в свою форму или в строку запроса, вы должны проверить токен, прежде чем ваш скрипт выполнит запрос. Это делается с помощью следующей строки:

JSession::checkToken() or die( 'Invalid Token' );

В Joomla 4.

$this->checkToken();

Если запрос поступает из строки запроса, вы должны указать это. Код становится:

JSession::checkToken( 'get' ) or die( 'Invalid Token' );

В Joomla 4.

$this->checkToken();

Рекомендуемые Процедуры Обеспечения Безопасности.

Хотя эти методы помогают предотвратить подобные типы атак, важно понимать, что как системный администратор необходимо соблюдать правила безопасности, которые предотвратят компрометацию сайта.

  1. Не просматривайте другие сайты в том же браузере, пока вы вошли на свой сайт.
  2. Выйдите из своего сайта после того, как вы закончите.
  3. Не оставайтесь на своем сайте, пока вы ничего не делаете.
  4. Убедитесь, что адрес в строке браузера совпадает с адресом вашего сайта.

Практикуя эти безопасные привычки серфинга, вы устраните большинство угроз для вашего веб-сайта.

 

Оригинал статьи: https://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms