Как предложено в этом вопросе , я добавляю эту тему в качестве нового вопроса для обсуждения / голосования в сообществе относительно передовых методов обеспечения безопасности плагинов / тем.
Вот начальный контрольный список, основанный на моих текущих (незавершенных) настройках / контрольном списке безопасности данных, используемых для просмотра Тем (принципы не должны отличаться для плагинов, чем для тем).
Если вы хотите проверить тему с помощью безопасной и прочно закодированной страницы настроек темы, проверьте эту тему:
http://wordpress.org/extend/themes/coraline
Ответы:
Использовать одноразовые номера (если не используется API настроек)
Плагины и темы должны явно обеспечивать проверку одноразовости страницы настроек, если не используется API настроек:
источник
Обеззараживать, проверять и удалять данные
Дезинфицируйте все, что может входить и выходить из (!) Базы данных, как переднего, так и внутреннего!
Плагины и темы должны выполнять правильную проверку данных:
Удалить все ненадежные данные перед выводом в файлы шаблона Theme
Плагины и Темы следует использовать
esc_attr()
для ввода текстаesc_html()
илиesc_textarea()
для текстовых областей.Также доступны из WordPress API является
esc_url()
,esc_url_raw()
,esc_js()
иwp_filter_kses()
.Плохой пример:
Хороший пример:
Вот отличное видео Марка Джакита, объясняющее использование экранирующих функций:
источник
Используйте $ _GET / $ _POST / $ _REQUEST только осторожно, и когда лучшие API недоступны
Плагины и темы должны использовать API настроек для получения и сохранения входных данных формы, а не полагаться на них
$_POST
и$_REQUEST
данные напрямую.источник
использование
$wpdb->prepare
При построении пользовательских запросов через
$wpdb
объект всегда используйте$wpdb->prepare
для заполнения заполнителей значениями, а не для написания запросов с данными, смешанными с кодом SQL, так какmysql_*
функции семейства неправильно учили всех.источник
$wpdb->prepare
это не то же самое, что подготовленные заявления.Будьте осторожны с функциями PHP, которые могут быть использованы для запуска вредоносного кода
Хорошее чтение для тех, кто пишет PHP: эксплуатируемые функции PHP в StackOverflow.
Используйте Theme Modification API
Темы должны использовать
set_theme_mod()
и связанные с ними функции, а не собственную схему имен.API theme_mod - это специализированный уровень для API настроек; он гарантирует уникальные имена, помещает все параметры в один массив и, по моему опыту, намного проще в обращении. Кроме того, он предлагает стандартные фильтры для плагинов - что хорошо для совместимости.
Избегать включен
register_globals
Не надейся
register_globals = on
. Pro Theme , который мой последний клиент купил делает именно это. Я мог взломать любой сайт, используя эту тему за 5 минут ...ThimbThumb сделал это тоже (и до сих пор делает?).
Не создавайте файлы с ненужными разрешениями широкого доступа
Не создавайте файлы с слишком свободными правами доступа.
Используйте SSL, где это возможно
Направьте свою ссылку в Twitter / Facebook / Anything на ссылки HTTPS, если они доступны. Безопасность вашего читателя тоже важна.
источник
set_theme_mod()
, в частности, как правильно сочетать его с использованием API настроек?Сохранить данные в одном массиве
Плагины и темы должны сохранять параметры в одном массиве, а не создавать несколько параметров для страницы настроек. Использование API настроек могло бы справиться с этим.
источник
Проверьте наличие соответствующих возможностей при добавлении и выводе страниц настроек
Плагины должны использовать соответствующие возможности (например
manage_options
) для возможности добавления страницы настроек.Темы следует использовать
edit_theme_options
в качестве соответствующей возможности для добавления страницы настроек.источник
edit_theme_options
API настроек, хотя параметрmanage_options
отправки жестко запрограммирован для отправки обновлений. Связанный билет Trac можно найти здесь .edit_theme_options
ограничена, я подумал, что было бы удобно указать, что API настроек в его текущем состоянии может использоваться только ролями сmanage_options
возможностью.Используйте современные учебные пособия и информацию
Плагины и темы должны реализовывать страницы параметров и настроек преднамеренно и не полагаться на учебные руководства по копированию и вставке, которые устарели и не включают надлежащую защиту данных, например, перечисленные ниже.
Примеры того, что не нужно делать :
Как создать страницу настроек для вашей темы WordPress (1stwebdesigner.com)
Создайте потрясающую страницу настроек WordPress, часть 1 (wpshout.com)
источник
Используйте API настроек
Плагины и темы должны использовать API настроек, который проще в использовании, более безопасен и берет на себя большую часть тяжелой работы страниц настроек:
Хорошие учебники по использованию API настроек смотрите:
источник
Для флажков и выбора опций, плагины и темы должны использовать
checked()
иselected()
функцию для выводаchecked="checked"
иselected="selected"
, соответственно.источник
checked( $theme_options['whatever_option'] )
илиchecked( 'some_value' == $theme_options['whatever_option'] )
. Я не знаю, как это становится более кратким, чем это?Префиксная функция и имена переменных
Плагины должны иметь префикс всех опций, пользовательских функций, пользовательских переменных и пользовательских констант с помощью plugin-slug.
Темы должны иметь префикс всех опций, пользовательских функций, пользовательских переменных и пользовательских констант с theme-slug.
источник
Используйте wp_safe_redirect () вместо прямого вызова функции php header () при переходе на страницу в том же домене.
источник
Добавить страницы настроек в соответствующие разделы меню администратора
Плагины должны использовать
add_options_page()
функцию добавления страницы настроек плагинов вSettings
меню, а неadd_menu_page()
добавлять меню верхнего уровня.Темы должны использовать
add_theme_page()
функцию для добавления страницы настроек темы вAppearance
меню, а неadd_menu_page()
для добавления меню верхнего уровня.источник