Windows — PHP скачать удаляет цифровую подпись кода

у меня есть php веб-приложение, которое позволяет нашим пользователям загружать наш установщик программного обеспечения setup.exe,

Мы только начали подписывать наш код, как установщик, так и приложения внутри него, и это нормально. Однако, когда я загружаю этот установщик на наш веб-сервер и загружаю его через php веб приложение, setup.exe больше не имеет цифровой подписи! Это как если бы оно никогда не было подписано.

Вот что я попробовал:

  1. [right click] -> [properties] показывает, что setup.exe не подписан код тем не мение setup.exe это ожидаемая версия.
  2. Я запустил установщик и установил наше программное обеспечение. Приложения, которые установлены, подписаны кодом и ожидаемой версией, соответствующей программе установки.
  3. Я пытался скачать setup.exe непосредственно с веб-сервера через cpanel Файловый менеджер и это нормально — setup.exe имеет цифровую подпись и ожидаемую версию.
  4. Попытки скачивания setup.exe с веб-сайта через различные браузеры (Firefox, Edge) приводит к тому же поведению.

РЕДАКТИРОВАТЬ

  1. Я также пытался переместить setup.exe подать в публичную область на сайте и скачать его непосредственно через браузер — работает отлично. Все, что я могу думать, это то, что проблема заключается в том, как PHP передает приложение в браузер.

Я думал, что заголовки HTTP или написанная нами функция загрузки PHP могут быть связаны с этой проблемой.

Наш универсальный include.php Файл имеет следующие заголовки для предотвращения кеширования:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Fri, 01 Jan 2016 01:00:00 GMT");   // a date in the past

И это наша функция загрузки:

function DownloadFile($file, $filename) {
// check if file exists and write header info and output file
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/x-msdownload');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
return true;
}
else {
// file does not exist
return false;
}
}

Что в первую очередь от readfile() пример на php.net. Здесь есть красные флаги? В чем дело?

-1

Решение

Проблема была вызвана тем, как веб-приложение обрабатывает файл после перенаправления заголовка на ту же страницу — сама страница также предоставляет другие данные в качестве содержимого.

После звонка DownloadFile() остальная часть страницы, включая HTML-содержимое и т. д., была отправлена ​​как часть файла — в результате дополнительные данные повредили цифровую подпись.

Решением было принудительно завершить работу сценария после отправки файла.

$file = $_SERVER['DOCUMENT_ROOT'] . '/../product/release/' . $path;
DownloadFile($file, "ProductInstaller.exe");
exit; // prevent the rest of the page from being sent as part of the file
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector