Intereting Posts
is_user_logged_in () не работает после изменения домена Расширение запроса WP: пользовательские значения метаданных геолокации работают, но tax_query breaks Фильтрация иерархической персонализированной страницы администратора по типу сообщений родителем и включение детей и внуков Ограничить фильтр upgraderader_post_install до одного плагина Разрешить пользователям моего плагина определять собственный код, а не использовать мой? Как автоматически активировать пользователей после регистрации без активации электронной почты? Почему «admin» отсутствует в моих ссылках на админ? Как я могу моделировать таксономию в запросе? Population Select Box 2 на основе опции, выбранной в поле выбора 1 Вам нужно две боковые панели (справа и слева) в теме «Двадцать семь» Как стилизовать первый пост по-разному с помощью 'get_template_part'? Уведомление администратора не отображается после сохранения настроек Переписать правила и постоянную ссылку Сравните meta_query с регулярным выражением и выполняйте на нем меньше, чем операцию Отображать только последнее пользовательское сообщение о таксономии

Боты, размещающие комментарии на страницах

Мне интересно, как бот может опубликовать комментарий на странице, где нет приглашения к шаблону комментариев в шаблоне, который использует страница?

Единственное место, которое я называю шаблоном комментариев, – на одном блоге, но боты, похоже, не заботятся о публикации спама.

У кого-нибудь еще есть эта проблема? Заранее спасибо!

Solutions Collecting From Web of "Боты, размещающие комментарии на страницах"

Чтобы добавить новый комментарий, вам действительно нужно только несколько полей и метод POST .

В типичной форме комментариев запросы отправляются на http://www.example.com/ который анализирует данные $_POST и отправляет их в wp_handle_comment_submission .

Метод POST зависит от запроса GET в том, что параметры обычно отправляются невидимым способом. С помощью GET вы можете увидеть www.example.com?foo=bar но в методе POST параметры отправляются в дополнение к запросу url, поэтому вы визуально видите только www.example.com .

Другое дело, что идентификатор page / post обычно можно рассматривать как класс в разделе тела страницы. <body class="page page-id-1234" поэтому, чтобы отправить комментарий на страницу, вам действительно нужен только этот идентификатор в сочетании с URL wp-comments-post.php адресом wp-comments-post.php .

Вот пример использования POSTMAN для создания запроса для PHP:

 <?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://www.vistex.com/wp-comments-post.php", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email-notes\"\r\n\r\nemail-notes-here\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"comment_post_ID\"\r\n\r\n134\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"author\"\r\n\r\n4\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"email\"\r\n\r\nbrandondragonballzzzzzz@gmail.com\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"url\"\r\n\r\nhttp://wordpress.stackexchange.com/questions/221084/bots-posting-comments-on-pages\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"comment\"\r\n\r\nspam_from_stackexchange_brandozzzzzzz - http://wordpress.stackexchange.com/users/64789/brandozz - http://wordpress.stackexchange.com/questions/221084/bots-posting-comments-on-pages\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"comment_parent\"\r\n\r\n134\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"_wp_unfiltered_html_comment\"\r\n\r\n_wp_unfiltered_html_comment\r\n-----011000010111000001101001--", CURLOPT_HTTPHEADER => array( "cache-control: no-cache", "content-type: multipart/form-data; boundary=---011000010111000001101001", "postman-token: c34ed3e0-fcc4-2b4b-75bf-d864135cddde" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } 

И тот же запрос в jQuery:

 var form = new FormData(); form.append("email-notes", "email-notes-here"); form.append("comment_post_ID", "134"); form.append("author", "4"); form.append("email", "brandondragonballzzzzzz@gmail.com"); form.append("url", "http://wordpress.stackexchange.com/questions/221084/bots-posting-comments-on-pages"); form.append("comment", "spam_from_stackexchange_brandozzzzzzz - http://wordpress.stackexchange.com/users/64789/brandozz - http://wordpress.stackexchange.com/questions/221084/bots-posting-comments-on-pages"); form.append("comment_parent", "134"); form.append("_wp_unfiltered_html_comment", "_wp_unfiltered_html_comment"); var settings = { "async": true, "crossDomain": true, "url": "https://www.vistex.com/wp-comments-post.php", "method": "POST", "headers": { "cache-control": "no-cache", "postman-token": "a66dc74a-685e-719c-75be-9c81ab69bf5e" }, "processData": false, "contentType": false, "mimeType": "multipart/form-data", "data": form } $.ajax(settings).done(function (response) { console.log(response); }); 

Как вы можете видеть, все данные удаляются из URL-адреса и отправляются с полями данных. Вы также можете видеть, что внешний интерфейс WP не требуется для отправки запроса комментария и что любой язык может отправлять комментарий из любого места. Удивительное право? 🙁

При этом, когда я попробовал этот метод на странице, которую вы описали, я получил ответ:

 <html>... <p>Sorry, comments are closed for this item.</p> ...</html> 

Это потому, что простая проверка, чтобы убедиться, что страница принимает комментарии в первую очередь:

 if ( ! comments_open( $comment_post_ID ) ) { 

Затем бросает и ошибочно, если они не открыты:

 return new WP_Error( 'comment_closed', __( 'Sorry, comments are closed for this item.' ), 403 ); 

Таким образом, в вашем случае может быть другой способ или может быть что-то еще запущенное, что вызывает новый комментарий :

 $commentdata = compact( 'comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID' ); $comment_id = wp_new_comment( wp_slash( $commentdata ) );