Поиск и удаление фразы на сервере

Тема в разделе "PHP", создана пользователем Levitt, 7 дек 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Levitt

    Levitt

    Регистр.:
    20 май 2008
    Сообщения:
    357
    Симпатии:
    36
    Комрады, другу заразили на серваке все файлы движка ифреймом. Нужно организовать поиск фразы и её удаление рекурсивно у всех файлов на сервере, где позволят права доступа.
     
  2. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
    юзай grep или fgrep с регуляркой
     
  3. inky

    inky Писатель

    Регистр.:
    25 апр 2010
    Сообщения:
    6
    Симпатии:
    1
    пробегитесь для начала поиском по контенту с 'iframe'
    если ничего не найдете ищите 'base64_decode' обычно там все зверье прячется
     
  4. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    Есть замечательный скрипт для поиска и замены:
    PHP:
    <?
    $work_dir="./";         
    // рабочая директория - обязательно должна заканчиваться
    // символом "/"
    $excl_dir=array();
    $excl_dir[0]="./no_work_here/";         
    $excl_dir[1]="./and_here/and_here/";
    // директории, где поиск/замена не производятся - обязательно должны заканчиваться
    // символом "/"
    $file_mask_1=".html";    
    $file_mask_2=".js";
    // маски обрабатываемых файлов (будут обработаны все файлы,
    // содержащие данную строку в имени)
    $search_str="test";    #что ищем
    $replace_str="TEST";    #чем заменяем
    //******************************************************
    $level=0;
    function 
    sr($dir)
    {
    global 
    $level,$file_mask_1,$file_mask_2,$search_str,$replace_str,$excl_dir;
    echo 
    "<b>";
    for (
    $i=0;$i<$level;$i++) echo "* * ";
    echo 
    $dir."</b>";
    if (@
    in_array($dir,$excl_dir))
    {
    echo 
    " - needn't search & replace<br>";
    return;
    }
    echo 
    "<br>";
    $p dir($dir);
    while(
    $ent=$p->read()) 
    {
    if (
    $ent!="." && $ent!=".." && !is_dir($dir $ent) && (eregi(sql_regcase($file_mask_1),$ent) || eregi(sql_regcase($file_mask_2),$ent)))
    {
    $tmp=@file($dir.$ent);
    $str=@implode("",$tmp);
    if (
    strpos("@!#%xrenoder^&*()".$str,$search_str))
    {
    for (
    $i=0;$i<($level)+1;$i++) echo "* * ";
    echo 
    $dir.$ent." found...";
    $str=str_replace($search_str,$replace_str,$str);
    if (
    $fp=@fopen($dir.$ent"w"))
    {
    flock($fp,LOCK_EX);     
    fwrite($fp,$str);
    fclose($fp);
    echo 
    " and replace<br>";
    }
    else echo 
    " and <b>can't replace</b><br>";
    }
    }
    elseif(
    $ent!="." and $ent!=".." and is_dir($dir $ent))
    {
    $level++;
    sr($dir.$ent."/");
    $level--;
    }
    }
    $p->close();
    return;
    }
    sr($work_dir);
    echo 
    "SEARCH & REPLACE Complete";
    ?>
     
  5. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    а я бы в index.php ( и остальные файлы двига ) засунул буферизацию вывода и уже перед выводом чистил страницу -- тогда пофиг что тебе и куда залили, до пользователя не дойдёт
     
  6. mcdir

    mcdir

    Регистр.:
    6 ноя 2007
    Сообщения:
    202
    Симпатии:
    37
    если будешь пользовать это оккуратнее - не будет работать с utf
    !!!
     
  7. DenisK

    DenisK

    Регистр.:
    8 фев 2007
    Сообщения:
    205
    Симпатии:
    13
    А что файлов так много?
    я бы скачал на локальный диск, и утилитой Search&Replace все вычистил а затем обратно.
    Зато так и бэкап есть :)
     
  8. B0nuse

    B0nuse Постоялец

    Регистр.:
    6 июн 2009
    Сообщения:
    105
    Симпатии:
    21
Статус темы:
Закрыта.