Intereting Posts
Alert Email при изменении любой почты или страницы Получить конкретные боковые панели $ wp_registered_sidebars Создание таблицы HTML из массива на основе значений динамических ключей Страница плагина WordPress загружается в контейнер содержимого Контента вместо отдельной страницы Как отобразить галерею пользовательских сообщений (изображения) через WP_Query Включение виджета по умолчанию в пользовательской разработке темы Какие методы использовать для создания небольших редактируемых фрагментов текста для статических страниц? Проблема WordPress и IPN Как включить плагин wp-postviews непосредственно в теме Недостаточно памяти при загрузке изображения Как включить XML-RPC в WP 4.8.2 у пользователя есть разрешение на чтение настраиваемого сообщения, но оно не отображается в плагине wordpress Интеграция видео и iframe в галерее типа публикации Встраивать виджеты из одной боковой панели в другую с помощью PHP Показывать виджет по-разному в зависимости от того, находится ли он на боковой панели или нижнем колонтитуле

Что такое безопасная передовая практика для плагинов и тем WordPress?

Как было предложено в этом вопросе , я добавляю эту тему в качестве нового вопроса для обсуждения / голосования в сообществе относительно лучших практик для обеспечения безопасности плагинов / тем.

Вот начальный контрольный список, основанный на моих текущих (незавершенных) настройках / контроле контроля безопасности данных, используемых для просмотра Темы (принципы не должны отличаться для плагинов, чем для Темы).

Если вы хотите просмотреть тему с защищенной и прочно закодированной страницей настроек темы, ознакомьтесь с этой темой:
http://wordpress.org/extend/themes/coraline

Использовать Nonces (если не использовать Settings API)

Плагины и темы должны явно предоставлять проверку параметров без параметров, если не использовать API настроек:

  • WordPress Nonces (Codex)
  • WordPress Nonces (Марк Яквит)
  • Улучшение безопасности в плагинах WordPress с использованием Nonces (Владимир Преловац)
  • 5 советов по использованию AJAX в WordPress> 3. Используйте nonces и проверьте разрешение (Gary Cao)

Санизировать, проверять и удалять данные

Санитируйте все, что можно было бы получить (и) из (!) Базы данных как передним, так и задним концом!

Плагины и темы должны выполнять правильную проверку данных:

  1. Проверять и дезинфицировать все недоверенные данные перед вводом данных в базу данных
  2. Избегайте всех недоверенных данных перед их выходом в поля «Настройки»
  3. Удалите все недоверенные данные перед их выходом в файлы шаблона темы

    • Проверка данных (Codex)

Плагины и темы должны использовать esc_attr() для текстовых входов и esc_html() или esc_textarea() для текстовых областей.

Также доступный из WordPress API: esc_url() , esc_url_raw() , esc_js() и wp_filter_kses() .

Плохой пример:

 <?php $url = 'javascript:pwnd()'; ?> <a href="<?php echo $url; ?>">anchor</a> 

Хороший пример:

 <a href="<?php echo esc_url($url); ?>">anchor</a> 

Вот замечательное видео Марка Яквита, объясняющее использование функций экранирования:

  • Безопасность темы и плагинов

Используйте только $ _GET / $ _POST / $ _REQUEST и когда лучшие API недоступны

Плагины и темы должны использовать API настроек, чтобы получать и сохранять входные данные формы, а не напрямую полагаться на данные $_POST и $_REQUEST .

Использовать $wpdb->prepare

При создании пользовательских запросов через объект $wpdb всегда используйте $wpdb->prepare для заполнения заполнителей значениями вместо того, чтобы писать запросы с данными, смешанными с кодом SQL, так как mysql_* семейства mysql_* неправильно учили всех.

Будьте осторожны с функциями PHP, которые могут использоваться для запуска вредоносного кода

Хорошее чтение для любого, кто пишет PHP: Exploitable PHP-функции на StackOverflow.

Использовать API модификации темы

Темы должны использовать set_theme_mod() и связанные функции, а не самопринятую схему имен.
API theme_mod является специализированным слоем для API настроек; он гарантирует уникальные имена, подталкивает все параметры в один массив и, по моему опыту, гораздо проще обрабатывать. Кроме того, он предлагает стандартные фильтры для плагинов, что хорошо для взаимодействия.

Избегать включения register_globals

Не полагайтесь на register_globals = on . Тема Pro, которую купил мой последний клиент, делает именно это. Я мог бы взломать любой сайт, используя эту тему за 5 минут …
ThimbThumb сделал это тоже (и все еще делает?).

Не создавать файлы с ненужными правами доступа

Не создавайте файлы с слишком ограниченными правами доступа.

Использовать SSL, если он доступен

Укажите свою долю в Twitter / Facebook / Все ссылки на URI HTTPS, если они доступны. Также важна безопасность вашего читателя.

Сохранение данных в одном массиве

Плагины и темы должны сохранять параметры в одном массиве, а не создавать несколько параметров для страницы настроек. Использование API настроек будет работать с этим.

Проверить подходящую возможность при добавлении и выводе страниц настроек

Плагины должны использовать соответствующую возможность (например, manage_options ) для возможности добавления страницы настроек.

Темы должны использовать edit_theme_options в качестве соответствующей возможности для добавления страницы настроек.

  • Роли и возможности (Codex)

Используйте современные учебники и информацию

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

Примеры того, что не нужно делать :

  • Как создать страницу параметров для темы WordPress (1stwebdesigner.com)

  • Создайте потрясающую страницу параметров темы WordPress часть 1 (wpshout.com)

Использовать API настроек

Плагины и темы должны использовать API-интерфейс настроек, который проще в использовании, более безопасен и заботится о большой сложной работе с страницами настроек:

  • API настроек (Codex)

Для получения хорошего руководства по использованию API настроек см.

  • Включение API настроек в WordPress Themes (Chip Bennett)
  • Обработка плагинов Опции в WordPress с register_setting () (Ozh Richard)
  • Учебник по настройкам API WordPress (Отто)

Для флажков и выбора опций плагины и темы должны использовать функции checked() и selected() для вывода check checked="checked" и selected="selected" , соответственно.

Префиксная функция и имена переменных

Плагины должны префикс всех параметров, пользовательских функций, настраиваемых переменных и пользовательских констант с плагином-пулем.

Темы должны префикс всех параметров, пользовательских функций, пользовательских переменных и пользовательских констант с помощью темы-slug.

Используйте wp_safe_redirect () вместо того, чтобы напрямую обращаться к функции заголовка php () при обращении к странице в том же домене.

Добавить страницы настроек в соответствующие разделы меню администратора

Плагины должны использовать add_options_page() чтобы добавить страницу настроек плагина в меню « Settings , вместо использования add_menu_page() чтобы добавить меню верхнего уровня.

Темы должны использовать add_theme_page() чтобы добавить страницу параметров темы в меню « Appearance , вместо использования add_menu_page() чтобы добавить меню верхнего уровня.