При создании плагинов и тем WordPress, которые будут использоваться на тысячах веб-сайтов, вы должны быть осторожны с обработкой как данных, поступающих в WordPress, так и данных, представляемых пользователю.
В этом руководстве мы рассмотрим встроенные функции, которые могут защищать, очищать и проверять данные, поступающие или выходящие из WordPress. Это необходимо при создании страницы настроек, HTML-формы, управлении шорткодами и т. Д.
Что такое дезинфекция?
Короче говоря, дезинфекция — это очистка ввода пользователя . Это процесс удаления текста, символов или кода из ввода, который не разрешен.
Пример Gmail: Gmail удаляет теги <style>
Это сделано для того, чтобы почтовый CSS не переписывал стили Gmail.
Пример WordPress: заголовки виджетов не могут содержать теги HTML. Если вы поместите в них HTML-теги, они будут автоматически удалены перед сохранением заголовка.
WordPress предоставляет различные функции для очистки различных данных в разных формах. Вот некоторые из них:
sanitize_email ()
Эта функция удаляет все символы, которые не разрешены в адресе электронной почты. Пример кода:
<?php
echo sanitize_email("narayan [email protected]"); //Output "[email protected]"
Адрес электронной почты не допускает пробельные символы. Поэтому пробельные символы были удалены с моего адреса электронной почты.
sanitize_file_name ()
Эта функция удаляет символы из имени файла, которые могут вызвать проблемы при обращении к файлу в командной строке. Эта функция используется WordPress Media Uploader для очистки имен файлов мультимедиа. Пример кода:
<?php
echo sanitize_file_name("_profile pic--1_.png"); //Output "profile-pic-1_.png"
Здесь подчеркивание в начале названия было удалено, а двойные тире были заменены одним тире. И, наконец, пробелы были заменены одним штрихом.
sanitize_key ()
Опции, метаданные и переходные ключи могут содержать только строчные буквенно-цифровые символы, тире и подчеркивания. Эта функция используется для дезинфекции клавиш. Пример кода:
<?php
echo sanitize_key("http://SitePoint.com"); //Output "httpsitepointcom"
Здесь заглавные буквы были преобразованы в строчные, а другие недопустимые символы были удалены.
sanitize_text_field ()
Эта функция удаляет недопустимые символы UTF-8, преобразует определенные символы HTML в сущности, удаляет все теги, удаляет разрывы строк, табуляции и лишние пробелы, удаляет октеты.
WordPress использует это для очистки заголовков виджетов.
<?php
echo sanitize_text_field("<b>Bold<</b>"); //Output "Bold<"
sanitize_title ()
Эта функция удаляет теги PHP и HTML из строки, а также удаляет акценты. Пробельные символы преобразуются в тире.
Примечание. Эта функция не используется для очистки заголовков. Для очистки заголовков вам нужно использовать sanitize_text_field
Эта функция используется WordPress для генерации слага для постов / страниц из заголовка поста / страницы. Пример кода:
<?php
echo sanitize_title("Sanítizing, Escaping and Validating Data in WordPress"); //Output "sanitizing-escaping-and-validating-data-in-wordpress"
Здесь символ í
i
-
И, наконец, заглавные буквы были преобразованы в строчные.
Что такое побег?
В двух словах, побег — это обеспечение выхода . Это сделано для предотвращения атаки XSS, а также для обеспечения того, чтобы данные отображались так, как того ожидает пользователь.
Escape преобразует специальные символы HTML в объекты HTML, чтобы они отображались вместо выполнения.
Пример: Facebook экранирует сообщения чата при их отображении. Чтобы пользователи не запускали код на компьютере друг друга.
WordPress предоставляет некоторые функции для избежания различных типов данных.
esc_html ()
Эта функция экранирует определенные символы HTML. Пример кода:
<?php
echo esc_html("<html>HTML</html>"); //Output "<html>HTML</html>"
esc_textarea ()
Используйте esc_textarea()
esc_html()
Потому что esc_textarea()
esc_attr ()
Эта функция кодирует символы <
>
&
"
'
<?php
echo esc_html("<html>HTML</html>"); //Output "<html>HTML</html>"
esc_url ()
URL-адреса также могут содержать код JavaScript. Итак, если вы хотите отобразить URL-адрес или полный тег <a>
href
<?php
$url = "javascript:alert('Hello')";
?>
<a href="<?php echo esc_url($url);?>">Text</a>
esc_url_raw ()
Это используется, если вы хотите сохранить URL-адрес в базе данных или использовать для перенаправления URL-адресов. Разница между esc_url
esc_url_raw
esc_url_raw
antispambot ()
Есть много почтовых ботов, которые постоянно ищут адреса электронной почты. Мы можем захотеть показать адрес электронной почты пользователям, но не хотим, чтобы его распознавали боты. antispambot
antispambot
Пример кода:
<?php
echo antispambot("[email protected]"); //Output "narayanprusty@sitepoint.com"
Что такое валидация?
В двух словах, проверка — это проверка ввода пользователя . Это делается для проверки, если пользователь ввел правильное значение.
Если данные недействительны, они не обрабатываются и не сохраняются. Пользователю предлагается ввести значение еще раз.
Пример: при создании учетной записи на сайте нас просят ввести пароль дважды. Оба пароля проверены; они проверяются, чтобы подтвердить, являются ли они оба одинаковыми или нет.
Вы не должны полагаться на проверку HTML5, поскольку ее легко обойти. Проверка на стороне сервера требуется перед обработкой или хранением определенных данных.
WordPress предоставляет несколько функций для проверки только некоторых типов данных. Разработчики обычно определяют свои собственные функции для проверки данных. Давайте посмотрим на некоторые функции проверки WordPress:
is_email ()
Проверка электронной почты требуется при отправке комментариев, контактных форм и создании учетной записи. WordPress предоставляет функцию is_email()
Пример кода:
<?php
if(is_email("[email protected]"))
{
echo "Valid Email";
}
else
{
echo "Invalid Email";
}
is_serialized ()
is_serialized()
WordPress использует эту функцию при хранении параметров, метаданных и переходных процессов. Если значение, связанное с ключом, не является строкой, WordPress сериализует его перед сохранением в базе данных.
Вот пример кода о том, как вы можете его использовать:
<?php
$data = array("a", "b", "c");
//while storing
if(!is_serialized($data))
{
//serialize it
$data = maybe_serialize($data);
//or else ask user to re-input the data
}
//while displaying
echo maybe_unserialize($data);
Вывод
Мы увидели, что такое дезинфекция, валидация и экранирование, и почему каждому разработчику важно знать функции, связанные с ними. Вы можете найти больше информации по этой теме на странице Кодекса проверки данных на WordPress.org . Всегда полезно включать эти функции при разработке темы или плагина WordPress. К сожалению, довольно много плагинов плохо разработаны, и не выходят из выхода. В результате они открывают сайт для потенциальных XSS-атак. Пожалуйста, не стесняйтесь включать любые комментарии или полезные советы в разделе ниже.