Как использовать функцию wp_safe_redirect() для безопасных редиректов

WP_SAFE_REDIRECT() │ WP 2.3.0

Функция wp_safe_redirect() выполняет безопасный редирект, используя функцию wp_redirect(). Перед тем как перенаправлять пользователя, она проверяет, находится ли хост (домен) в списке разрешенных.

Как работает функция

Перед тем как выполнить редирект на указанный адрес (URL), функция проверяет, разрешен ли этот хост. Если хост присутствует в списке разрешенных, редирект выполняется. В противном случае перенаправление происходит на стандартный адрес http://site.com/wp-admin. Это помогает защитить пользователей от злонамеренных перенаправлений на небезопасные сайты.

Расши��ение списка разрешенных хостов

Список разрешенных хостов может быть расширен с помощью плагинов. Для этого используется хук allowed_redirect_hosts().

Проверка URL

Дополнительно, вы можете использовать функцию wp_validate_redirect(), чтобы проверить URL перед редиректом.

Заменяемая функция

Функция wp_safe_redirect() является заменяемой, то есть вы можете создать функцию с таким же именем в вашем плагине, и она будет переопределять стандартную. Это означает, что данная функция определится (будет работать) только после загрузки всех плагинов, но до этого момента вы не сможете вызвать эту функцию напрямую из кода плагина. Вызов нужно делать на хуке plugins_loaded или позже, например на хуке init.

Важные точки

  • Использует:
    • wp_redirect()
    • wp_sanitize_redirect()
    • wp_validate_redirect()

Хуки функции

  • wp_safe_redirect_fallback — используется для задания резервного URL в случае, если предоставленный редирект небезопасен.

Возвращаемое значение

Функция возвращает:

  • true — если редирект выполнен успешно.
  • false — если редирект был отменен.

Использование функции

wp_safe_redirect( $location, $status );
exit;
  • $location (строка) (обязательный) — путь или URL для перенаправления.
  • $status (число) — HTTP код статуса. По умолчанию 302 (временно перемещено).
  • $x_redirect_by (строка|false) — приложение, выполняющее редирект, или false, чтобы пропустить это значение. По умолчанию 'WordPress'.

Примеры

Пример безопасного редиректа

Предположим, что мы передаем ссылку для редиректа в функцию wp_safe_redirect(), и она может изменяться в зависимости от действий пользователя. Нам нужно убедиться, что редирект происходит только если передан внутренний URL сайта. Вот пример кода, который поможет это сделать:

if( isset( $_POST['location'] ) ) {
    wp_safe_redirect( $_POST['location'] );
    exit;
}

Изменения в функции

  • С версии 2.3.0 функция была введена.
  • С версии 5.1.0 возвращаемое значение функции wp_redirect() теперь передается дальше, и параметр $x_redirect_by был добавлен.

Исходный код функции

function wp_safe_redirect( $location, $status = 302, $x_redirect_by = 'WordPress' ) {
    // Необходимо очистить URL перед редиректом.
    $location = wp_sanitize_redirect( $location );

    /**
     * Фильтрует резервный URL для редиректа, если предоставленный редирект небезопасен (локальный).
     *
     * @param string $fallback_url Резервный URL по умолчанию.
     * @param int    $status       Код статуса HTTP для использования.
     */
    $fallback_url = apply_filters( 'wp_safe_redirect_fallback', admin_url(), $status );

    $location = wp_validate_redirect( $location, $fallback_url );

    return wp_redirect( $location, $status, $x_redirect_by );
}

Связанные функции

  • auth_redirect()
  • wp_old_slug_redirect()
  • wp_redirect()
  • wp_sanitize_redirect()
  • wp_validate_redirect()

Теперь вы знаете, как использовать функцию wp_safe_redirect() для выполнения безопасных редиректов в WordPress. Эта функция поможет защитить ваших пользователей и предотвратить переходы на небезопасные сайты.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *