5 лучших способов устранить уязвимость WordPress
Опубликовано: 2020-02-01В настоящее время WordPress охватывает 33% Интернета. Это означает, что его использует огромное количество пользователей, что определенно привлечет больше злоумышленников и хакеров. Из-за этого существует больше угроз и атак , таких как атака SQL Injection, атака перенаправления, атака CSRF, атака XSS и т. д., которые вызывают уязвимость в WordPress. По этой причине это не означает, что WordPress небезопасен. Мы должны сосредоточиться на очистке данных, проверке данных, экранировании данных, использовании и проверке одноразового номера, безопасном перенаправлении, возможностях пользователя и т. д., чтобы сделать WordPress безопасным. Однако уязвимости в WordPress делают его небезопасным. Итак, давайте обсудим вопросы безопасности WordPress.
Уязвимости появляются и в WordPress. Но как?
С одной стороны, существуют серьезные угрозы и атаки из-за уязвимости WordPress . С другой стороны, мы должны преодолевать или предотвращать эти атаки с помощью нашего кода во время разработки WordPress.
Даже если вы не являетесь разработчиком WordPress, мы рекомендуем вам прочитать этот пост, потому что вы сможете узнать об основных атаках, привлекающих хакеров для атаки на ваш сайт. И вы также сможете понять, как узнать плохо написанные плагины и темы WordPress. Если вы управляете интернет-магазином, вам будет полезно выбрать лучшие безопасные плагины и темы WooCommerce.
Уязвимости безопасности WordPress
Откуда берутся уязвимые коды?
Во-первых, у нас должно быть хорошее понимание того, в чем заключаются проблемы безопасности WordPress . WordPress состоит из основного кода WordPress, тем и плагинов, которые включают Php, Html, javascript и другие коды.
Сообщество разработчиков открытого исходного кода проверяет основной код WordPress. Есть огромное количество людей, которые сообщают об ошибках, исправляют уязвимости и берут на себя ответственность за это. Уязвимость в WordPress может быть использована с помощью SQL-инъекции, атаки CSRF, атаки XSS, атаки перенаправления и других подобных методов. Таким образом, WordPress Vulnerability от основной разработки не так уж и много.
Ни темы обычно не взаимодействуют с базами данных wp, ни сайты часто меняют темы. Поскольку Gutenberg является редактором WordPress по умолчанию, нам нужно выбрать совместимые с Gutenberg темы WordPress для повышения производительности и безопасности. Таким образом, с ним возникает меньше уязвимостей.
С другой стороны, плагины WordPress имеют сложные функции и поведение. Также высок уровень взаимодействия с пользователями и базами данных. Сайт включает большое количество плагинов для внешних функций. В результате они могут привнести на сайт большое количество уязвимостей. Плагины создают серьезные уязвимости в WordPress.

По данным wpscan.org, 11% уязвимостей связаны с темами, а 37% уязвимостей связаны с разработкой ядра WordPress. Точно так же остальные 52% приходятся на плагины. Я полагаю, вы уже знаете, что такое плагин WordPress.
Угрозы и атаки
Если вы являетесь разработчиком темы или плагина для WP, то вы должны хорошо разбираться в угрозах и атаках, чтобы сделать свой код безопасным и снизить уязвимость WordPress.

Существует множество атак, таких как атака SQL-инъекция, атака XSS, атака перенаправления, атака CSRF, которые можно предотвратить с помощью очистки данных, проверки данных, экранирования данных, использования и проверки одноразового номера, безопасного перенаправления, пользовательских возможностей и т. д.
Как разработчик, ваш враг, как правило, злонамеренный пользователь. Такие пользователи вредят нашему коду. Когда мы включаем Never Trust User Inputs в наше ежедневное кодирование, мы уже на полпути к написанию более безопасного кода, чтобы уменьшить проблемы с безопасностью в WordPress. Это облегчит вашу работу в качестве настройщика WordPress.
Уязвимость WordPress — атака путем внедрения SQL-кода
В попытке получить важные и конфиденциальные данные атака с внедрением SQL внедряет вредоносный код SQL в базу данных WP. Они нацелены на сайты WordPress, которые используют базу данных SQL — MySQL, Oracle, SQL Server и т. д.
С этой целью у них есть доступ к паролю, адресу электронной почты или любым конфиденциальным данным, поскольку они могут легко добавлять, редактировать или читать данные.
Возьмем, к примеру, комикс The Famous «Bobby Tables».

В этом комиксе дама носит имя своего сына «Роберт»); DROP TABLE Студенты; –')'; с командой SQL, которая при входе в базу данных удалит всю таблицу учеников школы, если имя не было очищено.
Поэтому, чтобы избежать SQL-инъекций, мы должны дезинфицировать входные данные пользователя.
Давайте подробно обсудим очистку данных.
Очистка данных
Дезинфекция означает защиту ввода, очистку пользовательского ввода. Этот процесс удаляет недопустимый текст, символы UTF-8 или код из входных данных, чтобы уменьшить уязвимость в WordPress.
Он преобразует определенные символы HTML в сущности, удаляет все теги. Он также удаляет разрывы строк, табуляции и лишние пробелы, разделяющие октеты, которые являются причиной серьезных проблем с безопасностью в WordPress.
Существует множество встроенных функций WordPress для очистки данных. Немногие из них находятся в списке ниже:
- sanitize_email(): удаляет все символы, которых не должно быть в электронном письме.
- sanitize_text_field(): очищает строку (из пользовательского ввода/базы данных)
- sanitize_file_name(): удаляет символы (из имени файла)
- sanitize_key(): Удалить ключи, кроме строчных буквенно-цифровых символов, тире и подчеркивания.
Пример очистки данных:
$title=sanitize_text_field($_POST['title']); update_post_meta($post->ID,'title',$title);
Здесь, во-первых, мы очищаем заголовок. После санации мы обновляем значение title в базе данных wp.
$Name= ' Robert'); DROP TABLE Students; --') '; INSERT INTO Students VALUES ('$Name'); INSERT INTO Students VALUES ('Robert'); DROP TABLE Students; --')
Здесь, в приведенной выше команде SQL, имя содержит строку, специальные символы и сущности, которые вставляются в таблицу учеников, имя «Роберт»); Это закрывает команду вставки SQL, и другая команда начинает работать с половиной имени DROP TABLE Студенты; –')'; и студенты из этой таблицы удаляют все записи студентов в базе данных.
Таким образом, если перед вводом значения в базу данных была выполнена санация, вы не потеряли бы всю таблицу базы данных учащихся.
Давайте посмотрим на пример ниже, чтобы сделать санитарную обработку.
$Name=sanitize_text_field("' Robert'); DROP TABLE Students; --') ';"); $sql = $wpdb->prepare("INSERT INTO Students VALUES ($Name)"); /* this will only insert 'Robert DROP TABLE Students' */ $wpdb->query($sql);
Здесь, в приведенном выше примере, санитизация удалила лишние сущности и символы из имени и позволяет вставлять в базу данных только строку. Таким образом, мы можем безопасно вставлять данные и быть в безопасности от SQL-инъекций.
Перейдите по этой ссылке, чтобы узнать больше о защите ввода .
Уязвимость WordPress — XSS-атака
Атака Cross-Site Scripting (XSS) внедряет уязвимый код javascript языка сценариев для кражи аналогичных данных другого пользователя, таких как файлы cookie, токены сеанса и другая информация. Если у нас есть информация о файлах cookie, мы можем подключиться автоматически. Проблемы безопасности в WordPress возникают из-за украденных файлов cookie, поскольку мы можем легко войти в систему с другими учетными данными.
Он работает в браузере. Миллионы людей, просматривающих сайт, пострадают от этой атаки. Несомненно, эта атака является одной из самых серьезных атак.
Пример XSS-атаки:
<script
<script
type=”text/javascript”>
var hacker
='../hacker.php?
cookie_data='
+escape(document.cookie);
</script>
</script>
Здесь, в этом примере атаки XSS, файлы cookie ускользают и отправляются в переменную cookie_data сценария hacker.php.

Если злоумышленник внедрит этот скрипт в код веб-сайта, он будет выполнен в браузере пользователя, и злоумышленнику будут отправлены файлы cookie, что является опасной проблемой. Поэтому, чтобы избежать этого, нам нужно проверить. Проверяйте и дезинфицируйте все пользовательские входные данные и избегайте выходных данных.
Давайте подробно обсудим ниже.
Проверка данных
Валидация — это проверка ввода пользователя. Это делается для проверки того, вводит ли пользователь допустимое значение или нет.
Существует три способа проверки данных: встроенные функции PHP, основные функции WordPress и пользовательские функции. Никогда не избегайте этого, чтобы избежать уязвимости WordPress. Немногие из них находятся в списке ниже:
- isset()/empty(): проверить, существует ли переменная или нет
- is_email(): проверить, являются ли данные в формате электронной почты или нет
- is_serialized(): проверьте, является ли значение строкой или нет
Пример проверки данных:
$number='12323'; if(intval(number)){ //do your things } else{ esc_html_e('Enter valid number','text-domain'); }
В приведенном выше примере проверяется, являются ли входные данные числом или нет, программа запустится только в том случае, если это число. Таким образом, проверка данных помогает уменьшить проблемы безопасности WordPress.
Перейдите по этой ссылке, чтобы узнать больше о проверке данных
Экранирование данных
Экранирование обеспечивает защиту вывода. Это процесс удаления нежелательных данных, таких как искаженный HTML или теги сценария. Экранирование не только преобразует специальные символы HTML в объекты HTML, но и отображает вместо выполнения. Это делается для предотвращения атаки XSS, а также для того, чтобы данные отображались так, как ожидает пользователь.
WordPress предоставляет несколько вспомогательных функций. Они используются в большинстве случаев. Некоторые из них:
- esc_html(): экранирует определенные символы HTML
- esc_attr(): экранирует значение атрибутов тегов HTML.
- esc_url(): экранирует гипертекстовые атрибуты REFerence
Пример экранирования данных:
$url
=
"javascript
:
alert
('Hello')";
<a
href=
"<?php
echo
esc_url
($url)
;?>">
Text
</a>
href=
"<?php
echo
esc_url
($url)
;?>">
Text
</a>
В приведенном выше примере хакер ввел код языка сценариев, чтобы бросить вызов проблемам безопасности сайта WordPress. Поэтому, чтобы избежать этого, мы использовали esc_url для экранирования значения URL, и только после этого мы повторяем значение в нашем коде. Таким образом, мы предотвратили XSS-атаку.
Уязвимость WordPress — CSRF-атака
Обсуждая далее в разделе «Уязвимость WordPress», атака с подделкой межсайтовых запросов — это угрозы и атаки одним щелчком мыши или атака с использованием сеанса.
Атака CSRF позволяет злоумышленнику заставить вошедшего в систему пользователя выполнить важное действие без его согласия или ведома.
Здесь авторизованный пользователь передает несанкционированные команды.
Он основан на идее, что авторизованный пользователь, отправленный на определенную страницу или URL-адрес, может делать вещи, о которых он даже не подозревает. Более того, это можно исправить с помощью одноразового номера и проверить одноразовый номер.
Использование одноразового номера
WP генерирует токен безопасности, называемый одноразовым номером. Это неповторяющийся уникальный номер только для вас, который вы можете использовать для конкретной операции. Значение nonce действительно в течение 24 часов, после чего срок его действия истекает, и wp сгенерирует новое значение. Вы также можете установить время проверки для одноразового номера.
Он защищает URL-адреса и формы от неправильного использования, чтобы уменьшить существующие проблемы безопасности в WordPress.
Кроме того, чтобы защитить форму с помощью одноразового номера, создайте поле одноразового номера, скрытое с помощью функции wp_nonce_field():
<form method="post"> <!-- some inputs here ... --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>
Ниже приведены несколько функций для nonce:
- wp_nonce_url() — чтобы добавить одноразовый номер к URL-адресу.
- wp_create_nonce () — использовать одноразовый номер по-своему для обработки запросов AJAX.
Проверка одноразового номера
- check_ajax_referer() — проверяет одноразовый номер (но не реферер), и если проверка не удалась, то по умолчанию выполнение скрипта прекращается.
- wp_verify_nonce() — для проверки одноразового номера.
if(isset($_POST['name_of_nonce_field']) && wp_verify_nonce($_POST['name_of_nonce_field'],'name_of_my_action')){ //do something } else{ esc_html_e('Sorry,your nonce did not verify.','text-domain'); }
Перейдите по этой ссылке, чтобы узнать больше о nonce
Уязвимость WordPress — атака с перенаправлением
Уязвимость WordPress также заставляет посетителей сайта автоматически перенаправляться на вредоносный веб-сайт.
Обычно это происходит, когда посетитель перенаправляется на любую другую страницу вместо запрошенной страницы или веб-сайта.
Если ваш сайт имеет высокий трафик, эта атака может привести к снижению трафика на ваш сайт. Вы даже не заметите, что посетитель вашего сайта будет перенаправлен на любую другую страницу. Однако это можно исправить с помощью Safe Redirect.
Безопасное перенаправление
После действия или формы, если вы перенаправляете пользователя на любую страницу, используйте wp_safe_redirect. wp_safe_redirect проверяет разрешенный хост. Если хост не разрешен, он будет перенаправлен на URL-адрес сайта. Таким образом, это предотвратит злонамеренное перенаправление на другой хост. Но это не проверяется wp_redirect. Таким образом, чтобы уменьшить проблемы с безопасностью WordPress, использование wp_safe_redirect является более безопасным способом перенаправления ссылок.
$redirect=admin_url('edit.php'); wp_safe_redirect($redirect);
Уязвимость пользовательских возможностей
Помимо атаки перенаправления, атаки XSS, атаки CSRF и атаки SQL Injection, WordPress также уязвим из-за пользовательских возможностей. Если вы разрешаете любому пользователю заходить на ваш сайт для отправки каких-либо данных, проверьте возможности пользователя. В противном случае вы станете жертвой угроз и атак.
Чем выше роль пользователя, тем больше у него возможностей.
Иногда разработчики просто забывают убедиться, что пользователь, который находится на странице, отправляющей форму, имеет необходимые привилегии для выполнения действия или нет. Это принесет общий источник уязвимости WordPress.
if ( current_user_can( 'edit_posts' ) ) { edit_post_link( esc_html__( 'Edit', 'wporg' ), '', ''); }
Давайте рассмотрим пример уязвимости контактной формы 7 (тип уязвимости WordPress).
Число активации этого плагина составляет 5+ миллионов пользователей. Если будет один уязвимый код, то он затронет 5+ миллионов человек.

В версии 5.0.3 и более ранних версиях существовала уязвимость возможностей. Вошедший в систему пользователь с ролью участника может легко редактировать контактные формы. По умолчанию он был доступен только пользователям с правами администратора и редактора.
Таким образом, было больше шансов быть взломанным. В новой версии плагина эти ошибки устранены.
Всегда возвращаться или выходить в WordPress
Если вы пропустили возврат или умерли после завершения кода при написании какой-либо функции или вызова ajax. Это может выглядеть просто, но это может привести к важным проблемам безопасности.
Убедитесь, что вы всегда добавляли возврат и умираете в том месте, где хотите. Вы можете взять пример с ошибкой Apple #gotofail.
defined( 'ABSPATH' )
defined( 'ABSPATH' )
or die
( "No script kiddies please!" );
function
function
adls_view()
{ global $wpdb;
{ global $wpdb;
include( 'inc/frontend/smls-detail/smls-grid-inline.php' );
exit(); }
function
function
adls_generate_random_string
( $length ){
$string =
'1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$random_string
=
'';
for
( $i = 1; $i <= $length; $i ++ )
{
{
$random_string .=
$string[ rand( 0, 61 ) ];
}
return
$random_string;
}
}
Подведение итогов
Это был важный пост для профессионалов WordPress, которые заботятся о безопасности. Из этого поста вы узнали о различных угрозах и атаках, которые делают WordPress уязвимым. Он включает в себя краткое введение об атаке SQL Injection, атаке XSS, атаке CSRF, атаке перенаправления и многом другом.

Также обсуждались различные методы, такие как очистка данных, проверка данных, экранирование данных, использование и проверка одноразового номера, безопасное перенаправление и возможности пользователя. Из-за этого в WordPress возникают проблемы с безопасностью.
В заключение ,
- Никогда не доверяйте пользовательскому вводу, чтобы избежать уязвимости WordPress.
- Проверка, санация всех входных данных и экранирование всех выходных данных
- Давайте доверять WordPress!
Если вы столкнулись с какими-либо проблемами, связанными с вышеупомянутыми угрозами и атаками, сообщите нам об этом. Наши специалисты предложат вам подходящее решение, основанное на вашей проблеме.