Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Не работает админка

00 голосов
4
Всем добрый день!

Недавно с нашими сайтами приключилось следующее (одновременно):
1. Хостер (Мастерхост) перенёс виртуальную площадку на новый сервер. Как нам объяснили, связано это было с тем, что они отказываются от поддержки PHP 4.
2. На сайты пробрались "вирусы" (видимо, через украденный пароль на FTP), которые заключались в том, что в очень большое количество файлов .php, .html, .htm (содержащие в названии index, default и main), а так же во все без разбора .js, были добавлены строки вида:
Код
<script>/*Exception*/ document.write(код, пропущенный через обфускатор);</script>
<!--27a1f1d279206ed5d39fd79453e47079-->
Первая строка, собственно, и являлась вредоносной. Зачем вторая - не знаю.

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

После этого часть сайтов заработала нормально, но те, что на Битриксе (2 штуки) - нет.
Сами сайты удалось заставить работать, закомментировав в файле /bitrix/modules/main/include/epilog_after.php строчки:
Код
for($i=0; $i<count($arAllEvents); $i++) ExecuteModuleEvent($arAllEvents[$i]);
(Строчки были найдены экспериментальным путём и на что они влияют мы не в курсе).

Но админка так и не работает. Если пройти по ссылке http://domain/bitrix/ (как обычно делалось), то получаем пустой лист. Если пройти по полной ссылке http://domain/bitrix/admin/index.php, то большинство браузеров говорят "невозможно отобразить страницу", а FF пишет что-то про "неподдерживаемую форму компресии". Если попробовать телнетом - код страницы нормально получается...
Возможно, она тоже бы заработала, если где-нибудь что-нибудь закомментировать, но таких экспериментов уже не делалось, ибо они утомительны, плюс очевидно, что такой подход является неправильным.

Собственно, вопрос - кто-нибудь знает, в чём может быть дело? 8)
Это скорее последствия вирусов или переноса площадки?
Как вообще можно это отдебагить и понять, в чём проблема?
спросил 09 Май, 13 от Dante1111 (200 баллов)

4 Ответы

00 голосов
Такая проблема может быть если в заголовке отправить пробел или перевод строки перед началом работы пэхапе. Стоить проверить файлы init.php и dbconn.php, чтобы там не было пустых строк.
ответил 09 Май, 13 от Almarea (3,760 баллов)
00 голосов
Вообще то, что вы говорите, очень похоже на правду, потому что в выводе страницы админки (стучался телнетом на наши неработающие сайты на Битриксе, а так же работающие на другом хостинге, а потом сравнивал выводы diff'ом) неработающего сайта в начале идут 2 пустые строки. Вопрос в том, откуда они берутся...

Файлов init.php я в папках с сайтами не нашел. А в dbconn.php есть пустые строки, но они вроде бы все внутри блока PHP (внутри <? ?>). Да и не трогал никто этот файл... Где ещё можно поискать, не подскажете?
ответил 10 Май, 13 от Dante1111 (200 баллов)
00 голосов
Раз похоже на правду, проверьте в первую очередь те файлы, из которых удаляли вирусы.
Не поможет пойдите по цепочке сначала.
Т.е. если вы открываете файл /bitrix/admin/index.php
То откройте посмотрите на него, потом посмотрите на то что инклудится (учитывая "вложения" инклудов).
ответил 15 Июль, 13 от Almarea (3,760 баллов)
00 голосов
Спасибо за помощь, проблема вроде бы устранена. И заключалась она именно в пустых строках.
Удалять пришлось фактически вручную, что было долго, нудно и печально, но всё же оставлю пару скриптов, которые помогли. Может, кому пригодиться.

Скрипт удаления досовского перевода строки (^M):
Код
#!/bin/sh

if [ $# != 1 ]
then
  echo "Usage: remove_control_m.sh <extension of files>"
  echo ""
  echo "Example: remove_control_m.sh php3"
  exit
fi

for i in `find . -name "*.$1" -and \( -name "*index*" -or -name "*main*" -or -name "*default*" \)`
         do
         echo $i
         tr -d '\015' < $i > ${i}.new
         rm $i
         mv ${i}.new $i
        done; 
Соответственно, строку с find надо подправить под свои нужды.

Скрипт, который получает список файлов (из файла files), соединяет их в один (промежуточный файл cot) с указанием имени каждого файла, а затем нумерует все найденные пустые строки (итоговый файл fin):
Код
for i in `cat ./files`
   do 
      echo $i >> cot
      cat  $i >> cot       
   done;
awk '{ print NF ? $0 : ++n }' < cot > fin;
В итоговом файле относительно быстро можно найти, куда именно закрались пустые строки, а затем вручную их поправить в тех файлах, в которых это требуется.
ответил 19 Окт, 13 от Dante1111 (200 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
1 ответ
0 голосов
1 ответ
спросил 30 Июнь, 16 от аноним
0 голосов
0 ответов