Удаляем плагин NextScripts: Social Networks Auto-Poster

Ключевые мысли:

  1. Всегда делайте uninstall.php (или через фильтр) для плагинов и тем, потому что ваши options имеют свойство autoload и засоряют память.
  2. Из первого пункта можно сделать вывод, что ставить плагины и темы для поиграться на сайт ни в коем случае нельзя, потому что они засоряют таблицы и сайт будет работать медленее.

Однажды мне посчастливилось встретить сайт с установленным плагином NextScripts: Social Networks Auto-Poster версии 3.4.3. Эта «свистелка» делает автопостинг в социальные сети. Плагин, вроде, работает, но живой человек лучше справляется с этой задачей и если вам важны люди и вы цените и уважаете свою аудиторию, то такие инструменты использовать нельзя. Поэтому данный плагин было решено удалить и больше никогда не использовать.

Перед удалением я полез в исходный код, чтобы проверить на месте ли uninstall.php, который почистит все необходимое при удалении. Файла не оказалось. Открыв исходники, чтобы самостоятельно разобраться, я был неприятно удивлен. Повсюду наимерзейший код. Надо сказать, что такого ада еще поискать надо (форматирование сохранено):

if (!function_exists("nxs_metaMarkAsPosted")) { function nxs_metaMarkAsPosted($postID, $nt, $did, $args=''){ $mpo = get_post_meta($postID, 'snap'.$nt, true); $mpo = maybe_unserialize($mpo);
//prr($postID); prr('snap'.$nt); prr($mpo); echo "#####".$postID."|".$nt."|".$did."|".$args;
if (!is_array($mpo)) $mpo = array(); if (!isset($mpo[$did]) || !is_array($mpo[$did])) $mpo[$did] = array();
if ($args=='' || ( is_array($args) && isset($args['isPosted']) && $args['isPosted']=='1')) $mpo[$did]['isPosted'] = '1';
if (is_array($args) && isset($args['isPrePosted']) && $args['isPrePosted']==1) $mpo[$did]['isPrePosted'] = '1';
if (is_array($args) && isset($args['pgID'])) $mpo[$did]['pgID'] = $args['pgID'];
if (is_array($args) && isset($args['postURL'])) $mpo[$did]['postURL'] = $args['postURL'];
if (is_array($args) && isset($args['pDate'])) $mpo[$did]['pDate'] = $args['pDate'];
/*$mpo = mysql_real_escape_string(serialize($mpo)); */ delete_post_meta($postID, 'snap'.$nt); add_post_meta($postID, 'snap'.$nt, str_replace('\\','\\\\', serialize($mpo)));
}}

Сам автор на форумах советует просто удалить плагин, забыть и не париться. На официальном сайте было найдено вот такое решение:

DELETE FROM `wp_options` WHERE `option_name` = ‘NS_SNAutoPoster';
DELETE FROM `wp_options` WHERE `option_name` = ‘NS_SNriPosts';
DELETE FROM `wp_postmeta` WHERE `meta_key` LIKE ‘snap%’

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

Для начала ищем вызовы add_option(), update_option(), delete_option(). В результате нашлись:

  1. NS_SNAutoPoster
  2. NS_SNAutoPosterLog
  3. NSX_LastTChecked
  4. NS_SNriPosts
  5. NSX_PostsQuery
  6. NSX_LogToEmail
  7. nxs_li_ctp_save
  8. NXS_cronCheck
  9. nxs_log_db_table_version

Обратите внимание на абсолютно разную стилистику префиксов всех опций.

Теперь вспомним про Cron, потому что там тоже что-то должно быть, судя по настройкам плагина. Ищем вызовы wp_schedule_event() и wp_schedule_single_event(). Нашлись вот такие задачи:

  1. nxs_hourly_event
  2. nxs_querypost_event
  3. ns_doPublishTo* (звездочка означает, что там еще что-то после добавляется)

Для каждого поста тоже сохраняется кое-какая информация. Это заметно, если открыть редактор любого поста. Один взгляд на дополнительные поля (Post Meta) бросает в ужас и лихорадку. Там на голую выводятся массивы! Ищем вызовы add_post_meta(), update_post_meta(), get_post_meta(), delete_post_meta(), get_post_custom(), get_post_custom_values(), get_post_custom_keys().

  1. snapImportedFBComments
  2. snapImportedComments
  3. snap_MYURL
  4. snapEdIT
  5. snap_isAutoPosted
  6. snap*
  7. _nxs_snap_sh_*
  8. snap_mp_*
  9. snapAP
  10. snapBG
  11. snapDA
  12. snapDI
  13. snapDL
  14. snapFB
  15. snapFF
  16. snapFL
  17. snapFP
  18. snapGP
  19. snapIP
  20. snapKT
  21. snapLI
  22. snapLJ
  23. snapPK
  24. snapPN
  25. snapRD
  26. snapSC
  27. snapST
  28. snapSU
  29. snapTR
  30. snapTW
  31. snapVB
  32. snapVK
  33. snapWP
  34. snapXI
  35. snapYT
  36. snapTW

Почти хорошо. Лишь пара префиксов каких-то странных. Звездочками обозначено, что дальше непонятно что еще дописывается. Дебагером нет времени пробегаться по всему коду, чтобы смотреть какие будут значения.

На всякий случай стоит посмотреть все имеющиеся дополнительные поля для одного из постов, в котором есть один из параметров, что указаны выше. Берем wp cli и смотрим:

wp post meta list ID
+---------+---------------------------+---------------------------+
| post_id | meta_key                  | meta_value                |
+---------+---------------------------+---------------------------+
| ID      | _edit_lock                | 1405525732:1              |
| ID      | _edit_last                | 1                         |
| ID      | _yoast_wpseo_opengraph-im | http://siteexample.com    |
|         | age                       |                           |
| ID      | snap_MYURL                |                           |
| ID      | snapEdIT                  | 1                         |
| ID      | snapVK                    | a:1:{i:0;a:7:{s:4:"doVK"; |
|         |                           | s:1:"1";s:10:"SNAPformat" |
|         |                           | ;s:7:"ITLE%";s:11:"addB   |
|         |                           | ackLink";s:1:"1";s:9:"isA |
|         |                           | utoImg";s:1:"A";s:8:"imgT |
|         |                           | oUse";s:0:"";s:9:"isAutoU |
|         |                           | RL";s:1:"A";s:8:"urlToUse |
|         |                           | ";s:0:"";}}               |
+---------+---------------------------+---------------------------+

Все в порядке, видно лишь то, что мы уже нашли. Для еще некоторых постов тоже самое.

На всякий случай посмотрим не используются ли где-то «голые запросы» к базе данных. Ищем wpdb. О, нет! Видно, что есть отдельная таблица wp_nxs_log. Ее тоже надо удалить.

Спустя некоторое время после публикации поста обнаружилось, что плагин добавляет свои capability для некоторых типов учетных записей.

  1. make_snap_posts
  2. see_snap_box
Advertisements

2 thoughts on “Удаляем плагин NextScripts: Social Networks Auto-Poster

    • Это нужно просто сделать поиск по папке и всем файлам на строчку “add_option” внутри 🙂 И посмотреть с какими параметрами она вызывается, чтобы знать название опций, которые нужно будет удалить.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s