1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Как работает функция проверки файлов?

Тема в разделе "Основные вопросы по XenForo", создана пользователем Бboris, 30.08.2011.

Загрузка
  1. Бboris

    Бboris Тролль

    Регистрация:
    20.08.11
    Сообщения:
    205
    Симпатии:
    33
    Затеялся посмотреть, как работает функция проверки файлов в XenForo.
    Уже и сам не рад,что полез туда :).

    Вот что получилось из затеи: теоретически в файле /library/XenForo/Install/Data/FileSums.php есть массив, ключами которого служат имена файлов, а значениями служит х/з знает что :)

    Пары ключ => значение, выглядят так:

    PHP:
    'fb_channel.php' => '91d6cd26afd57974c7df1c588bcad0f2',
      
    'admin.php' => 'f98b5f3635b70b01b54bb5c5506b7d9a',
      
    'library/Lgpl/utf8.php' => 'e34c46e954b32363df2d9bda6bb16ba4',
      
    'library/XenForo/DataWriter.php' => '6f78923ee88cc8ec745198477255435f',
    С ходу я подумал, что это MD5 и решил проверить таким скриптом:

    PHP:
    <?php
    $file 
    'library/XenForo/ViewRenderer/Raw.php';

    echo 
    'MD5 file hash of ' $file ': ' md5_file($file);
    ?>
    В результате из 10 файлов прогнанных через скрипт, хеш сошелся с базой только в 1 случае!
    Тогда в этот же скрипт стал засовывать файлы не из головной папки а брать поглубже. Из папки из library - тут все наоборот! 90% сгенерированных хешей сошлось с базой.

    И на закуску: положил в папку форума файл sound2.wav, снял с помощью вышеозначенного php скрипта хеш и прописал его в массив файла FileSums.php.

    В результате проверки получил:
    Снимок1.gif

    Господа! Объясните пожалуйста! По какому принципу строится база этих файлов?
    Если это MD5 - то на круг должно все быть везде одинаково!
    Если это не MD5 - то что это? Кроме того как минимум половина записей - это точно MD5, xenforo-вская чекалка это подтвердила!
    И если я кладу в папку со скриптом свои файлы и хочу их проверять форумной чекалкой, то как быть?

    Голова кругом. Может кто то может растолковать этот бермудский треугольник? :)
     
  2. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Это md5, только считается он с помощью функции
    PHP:
    public static function getFileContentsHash($contents)
        {
            
    $contents str_replace("\r"''$contents);
            return 
    md5($contents);
        }
     
  3. Бboris

    Бboris Тролль

    Регистрация:
    20.08.11
    Сообщения:
    205
    Симпатии:
    33
    Pepelac - напишите пожалуйста полный код (реально рабочий вариант) файла md5_pepelac.php ;) который бы "правильно подсчитывал" MD5.
    По аналогии с моим файлом!
    Код:
    <?php
    
    $file = 'library/XenForo/ViewRenderer/Raw.php';
    
    echo 'MD5 file hash of ' . $file . ': ' . md5_file($file);
    
    ?>
    Что бы любой человек смог запустить этот файл через браузер www.sait.tu/md5_pepelac.php, снять "правильную MD5", которая бы работала в /library/XenForo/Install/Data/FileSums.php
     
  4. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    По аналогии с вашим файлом, надо делать так
    PHP:
    $file 'library/XenForo/ViewRenderer/Raw.php';

    $contents file_get_contents($file);
    $contents str_replace("\r"''$contents);

    echo 
    'MD5 file hash of ' $file ': ' md5($contents);
     
    Бboris нравится это.
  5. Бboris

    Бboris Тролль

    Регистрация:
    20.08.11
    Сообщения:
    205
    Симпатии:
    33
    Благодарю! :)
    Теперь можно класть в папку скрипта свои файлы и проверять их целостность из админки. Почти как антивирус.
     

Поделиться этой страницей