Проверьте, зашифрован ли файл Zip или защищен паролем с помощью PHP - PullRequest
1 голос
/ 23 октября 2019

Я пишу сканер, который будет искать возможно взломанные / вредоносные файлы. Одно из требований - проверить, защищен ли zip (или любой сжатый) файл паролем с помощью некоторой функции PHP.

Я не хочу добавлять какие-либо дополнительные требования к программному обеспечению, поэтому должен работать на нескольких серверах с использованием PHP. 5.3+. (Да, я знаю, что 5.3 старый, но процесс может потребоваться запустить на более старых установках PHP.) Если это обнаружение доступно в более новых версиях PHP, то я мог бы иметь код, который будет выполняться только на более новой версии PHP.

Я могу использовать функцию file_get_contents() для чтения содержимого файла в строку. Как проверить эту строку на наличие признаков того, что zip-файл защищен паролем? Обратите внимание, что я не хочу распаковывать файл, просто проверьте его на предмет защиты паролем.

Спасибо.

1 Ответ

0 голосов
/ 23 октября 2019

Этот код работает, но может быть улучшен.

Процесс состоит из двух этапов:

  • используйте zip_open, чтобы открыть файл, возвращая ресурс,Ресурса нет, zip не может быть открыт, поэтому он может иметь пароль

  • использовать zip_read для чтения файлов внутри zip. В случае неудачи пароль может быть передан

В любом из этих двух случаев верните true, указывая вероятный пароль в zip-файле.

// try to open a zip file; if it fails, probably password-protected
function check_zip_password($zip_file = '') {
    /*
    open/read a zip file
    return true if passworded
     */
    if (!$zip_file) { // file not specified
        return false;
    }
    $zip = zip_open($zip_file);     // open the file
    if (is_resource($zip)) {        // file opened OK
        $zipfile = zip_read($zip);  // try read of zip file contents
        if (!$zipfile) { // couldn't read inside, so passworded
            return true;
            } 
            else 
            { // file opened and read, so not passworded
            return false;
        }
    } else { // couldn't open the file, might be passworded
        return true;
    }
    return false; // file exists, but not password protected
}

Обратите внимание, что кодтолько определяет, что файлы внутри почтового индекса не могут быть доступны, поэтому они, вероятно, защищены паролем. Код не пытается выполнять какую-либо обработку файлов внутри почтового индекса.

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