События и фильтры в WordPress. PHP _SELF в атрибуте формы action Точный do php action

События и фильтры в WordPress. PHP _SELF в атрибуте формы action Точный do php action

Подписаться
Вступай в сообщество «de-kaizer.ru»!
ВКонтакте:

Создает событие (зацепку для произвольной функции). Чтобы функция сработала в момент события её нужно подключить к этому событию с помощью функции add_action() .

Кроме событий в WP есть еще фильтры (filters), принцип работы такой же. Разницы лишь в том, что фильтр должен вернуть полученную переменную, т.е. он фильтрует (изменяет) данные, а событие позволяет запустить пользовательскую функцию в момент срабатывания этого события. Фильтры запускаются функцией apply_filters()

✈ 1 раз = 0.00007с = очень быстро | 50000 раз = 0.03с = скорость света

Хуков нет.

Возвращает

Ничего не возвращает.

Использование

do_action($tag, $arg_a, $arg_b, ...); $tag(строка) (обязательный) Название создаваемого хука. $arg_a Значение аргумента, который будет передан.
$arg_b(строка/массив/число/объект/логический) Значение еще одного аргумента...
По умолчанию: аргумент не существует $arg_с(строка/массив/число/объект/логический) Функции можно передавать бесконечно много аргументов...

Примеры

#1. Пример использования

Эту функцию можно использовать в плагинах, темах и т.д., когда нужно внедрится в процесс выполнения кода, откуда-нибудь из другого места. Например, "зацепку" (хук) (do_action) мы установили в плагине, а "цепляться" за нее будем из файла functions.php в тот момент, когда будет срабатывать наша "зацепка".

Допустим, мы использовали такой код в плагине:

Теперь мы может сделать какое-нибудь действие в момент срабатывания функции do_action и при этом описать наше действие можно, например, из файла functions.php, разместив в нем такой код:

Function do_my_hook($a, $b){ // если переданная переменная $a равна true, // то, например, удалим запись 10 if($a===true) wp_delete_post(10); // а тут просто выведем переменную на экран echo "
".$b; // выведет значение второй переменной } // Регистрируем хук через // add_action($tag, $function_to_add, $priority, $accepted_args); add_action("my_hook", "do_my_hook", 10, 2);

Действия отличаются от фильтров, тем что передаваемые действием данные, не возвращаются обратно в функцию и не используются там в дальнейшем, а всего-лишь передаются для использования в функции хука.

Код do action : wp-includes/plugin.php WP 5.2.2

do_action($args); array_pop($wp_current_filter); }

В этой статье подробно говорится об использовании переменной PHP _SELF.

Что за переменная PHP _SELF?

Переменная PHP _SELF возвращает имя и путь к текущему файлу (относительно корня документа). Вы можете использовать эту переменную в атрибуте формы action. Существуют также некоторые нюансы, которые вы должны знать. Мы, конечно, никак не можем обойти стороной эти нюансы.

Давайте рассмотрим несколько примеров.

Echo $_SERVER["PHP_SELF"];

1) Предположим, что ваш php файл расположен по следующему адресу:

Http://www.yourserver.com/form-action.php

В этом случае переменная PHP _SELF будет содержать:

"/form-action.php"

2) Предположим, ваш php файл расположен по такому адресу:

Http://www.yourserver.com/dir1/form-action.php

PHP _SELF будет:

"/dir1/form-action.php"

PHP _SELF в атрибуте формы action. Для чего она там понадобилась?

Обычно переменную PHP _SELF используют в атрибуте action тега form . В атрибуте action указывается адрес, по которому будет отослано содержание формы после подтверждения (клик пользователем по кнопке с type="submit"). Как правило это таже самая страница, с которой ушла форма.

Однако, если вы переименуете файл, на который ссылается форма, вам понадобится переименовать название файла в атрибуте action , иначе форма работать не будет.

Переменная PHP _SELF избавит вас от лишних исправлений, так как адрес страницы будет генерироваться автоматически, исходя из названия файла.

Допустим, у вас есть файл с формой form-action.php, и вы хотите, чтобы после подтверждения форма отправлялась на тот же самый файл. Обычно пишут так:

Но вы можете использовать переменную PHP _SELF вместо form-action.php. В этом случае код будет выглядеть:

" >

Код для form-action.php

Объединим скрипт с формой:

$name "; echo "
Youcanusethefollowing form again to enter a new name."; } ?> ">

Код, стоящий в верхней части HTML страницы, будет выполнен первым. В первой строчке кода проверяется: форма отправлена или нет. Если существует $_POST["submit"] , то конструкция IF выполняется (TRUE) и будет выведено имя, введенное пользователем.

Если переменной $_POST["submit"] не существует, то форма не была отправлена и, соответственно, конструкция IF выполняться не будет (FALSE). Поэтому имя пользователя выведено не будет.

Нежелательные моменты, связанные с переменной PHP _SELF

Переменная PHP _SELF используется для того, чтобы получить имя и путь к текущему файлу - хорошо, но ее также могут использовать хакеры - плохо. Если на вашей странице стоит PHP _SELF, пользователь может ввести слеш (/) и прописать вредоносные XXS скрипты.

Рассмотрим пример:

" method="post">

Теперь, если пользователь зашел с нормального url , то в адресной строке будет что-то наподобие:
http://www.yourdomain.com/form-action.php
а код, приведенный выше, можно прочитать так:

В этом случае, как вы видите, все нормально.

Теперь давайте рассмотрим ситуацию, когда пользователь начинает "химичить" с адресной строкой:
http://www.yourdomain.com/form-action.php/%22%3E%3Cscript%3Ealert("xss")%3C
/script%3E%3Cfoo%22

В этом случае, после работы PHP ваш код примет такой вид:

Вы можете видеть сами, что в код добавлен тег script и команда alert . Когда эта страница будет загружена, пользователь увидит окно с предупреждением. Это простой пример того, как можно эксплуатировать переменную PHP _SELF.

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

Как избежать неприятностей, связанных с PHP _SELF

Неприятностей можно избежать, используя функцию htmlentities() . Взгляните на код формы, где присутствует функция htmlentities() .

" method="post">

Функция htmlentities() преобразует все возможные символы в соответствующие HTML-сущности. Теперь попытка обойти переменную PHP _SELF потерпит крах и результат внедрения вредоносного кода выразиться в следующем:

← Вернуться

×
Вступай в сообщество «de-kaizer.ru»!
ВКонтакте:
Я уже подписан на сообщество «de-kaizer.ru»