Intereting Posts
Команда SQL для восстановления обработанных комментариев Вставка изображений в несколько столбцов Поиск по сообщению id на определенной странице, затем авто-перенаправление на поиск по почте Сообщение на страницу не работает, если ни одна категория не указана Фильтр условных градиентных форм в WordPress Multisite Запросы Active DB в WordPress? Кнопка внутри пользовательского метабокса, запускающая кнопку обновления Изменить выход на основе значения текстового поля Ограничить доступ к определенным пользователям API переходных процессов и мультисайты WooCommerce: отображать категории продуктов для выражения IF Могу ли я установить изображение по умолчанию для категории? Как подключиться к wordpress admin upload iframe? Как увеличить размер загрузки только при редактировании специальных страниц? Как вызвать пользовательские категории таксономии с короткими кодами

wp_sanitize_redirect выдает знаки @ (даже из параметров) – почему?

На моем сайте WordPress у меня есть хак, который смотрит на uri и делает перенаправление на субдомен. Проблема состоит в том, что wp_redirect вызывает wp_sanitize_redirect, который будет вытеснять знаки @, поэтому, когда пользователь пытается загрузить что-то вроде

oursite.com?email=foo@bar.com

Загружаемая страница должна быть

prefix.oursite.com?email=foo@bar.com

но вместо этого

prefix.oursite.com?email=foobar.com (т. е. – нет знака @)

Проблему легко обойти – я просто вручную кодирую знаки @ как% 40 перед вызовом wp_redirect.

Вопрос: почему именно wp_sanitize_redirect вычеркивает @ знаки, точно? В любом случае любой может попытаться загрузить URL-адрес с помощью знака @ – есть ли проблема с безопасностью, о которой я не думаю?

EDIT: Функция, о которой я говорю, – wp_sanitize_redirect

Solutions Collecting From Web of "wp_sanitize_redirect выдает знаки @ (даже из параметров) – почему?"

Вопрос: почему именно wp_sanitize_redirect @ знаки? В любом случае любой может попытаться загрузить URL-адрес с помощью знака @ – есть ли проблема с безопасностью, о которой я не думаю?

Просто взгляните на источник:

 function wp_sanitize_redirect($location) { $location = preg_replace('|[^a-z0-9-~+_.?#=&;,/:%!]|i', '', $location); $location = wp_kses_no_null($location); // remove %0d and %0a from location $strip = array('%0d', '%0a', '%0D', '%0A'); $location = _deep_replace($strip, $location); return $location; } 

Таким образом, единственные символы, preg_replace

  • нижний регистр az
  • чисел
  • и ~+_.?#=&;,/:%! ,

Что это значит для URI и URL-адресов?

Функция php urlencode() заменяет все альфа-числовые chararcters, кроме -_. с символом % (процентов), за которым следуют два шестнадцатеричных значения и пробелы с символом + . Если вы используете rawurlencode() , он также rawurlencode() + . Как вы можете видеть из preg_replace() , он позволяет все URL-кодированные / подготовленные символы, поэтому можно безопасно бросить в игру такие закодированные символы / URL-части.

Просто хотел следить за своими выводами. Это случилось со мной, если я оставил последний / в моих URL-адресах. Это привело к тому, что WP вызывал func: redirect_canonical, который удалял символы @. Когда я добавил последний /, он не вызывал эту функцию, и символ @ остался.

Хороший плагин для перенаправления перенаправления: Debug WP Redirect

Пример 1, который не выполняется:

Исходный URL: http://www.domain.com/somepage?email=me@me.com

Конечный URL: http://www.domain.com/somepage/?email=meme.com

Пример 2, который работает:

Исходный URL: http://www.domain.com/somepage/?email=me@me.com

Конечный URL: http://www.domain.com/somepage/?email=me@me.com