Безопасность
Ваш код работает! Но безопасен ли он? Есть ли вероятность что через ваш плагин, злоумышленник может получить доступ к сайту? Имейте в виду, что ваш код может быть запущен на сотнях, может быть, даже миллионах сайтов, поэтому безопасность имеет первостепенное значение.
Особое внимание безопасности нужно уделять при:
- создании страницы настроек плагина.
- создании шорткодов.
- сохранение данных в БД.
- выводе данных на экран.
Выделю три модели, которым можно следовать, чтобы обеспечить безопасность кода.
1. Безопасный ввод
Каждый раз, когда PHP код получает какие-то данные:
- пользователь отправляет данные в WordPress через форму.
- данные импортируются из внутреннего или внешнего источника.
- обрабатывается AJAX запрос.
- данные поступают в WordPress через всевозможные API.
Очень важно убедиться, что это безопасно. Cделать это можно путем проверки и очистки данных.
2. Очистка вывода
Каждый раз, когда заголовок записи, мета данные, или любые другие данные предоставляются пользователю - выводятся на экран, их нужно очищать. Очистка нужна чтобы предотвратить атаки типа: Cross-Site Scripting (XSS - межсайтовый скриптинг).
В WordPress для такой очистки предусмотрен ряд функций все они начинаются с префикса esc_, например esc_html().
3. Проверка прав доступа
Для предотвращения несанкционированных изменений настроек плагина или совершения действий, которые пользователь не имеет права выполнять, нужно проверять права доступа.
WordPress предлагает два пути:
-
проверка возможностей пользователя - см. current_user_can()
- одноразовые числа (nonce) - см. все nonce функции
Оба эти типа защиты нужно использовать совместно, т.е. один дополняет другой...
Полезные ссылки по теме безопасности WordPress
-
How to fix the intentionally vulnerable plugin by Jon Cave
- Mark Jaquith’s Theme and Plugin Security presentation