UnitDev 1 Опубликовано: 12 июня 2023 Рассказать Опубликовано: 12 июня 2023 (изменено) @celsoft Заметил особенность, что хеши не совпадают, если файл залит на удалённый хост. $size = DLEFiles::Size( $this->upload_path . FOLDER_PREFIX . $uploaded_filename ); if ( $driver AND !DLEFiles::$remote_error ) { $http_url = $config['remote_url']; $md5 = md5( $size ); } else { $http_url = $config['http_home_url'] . "uploads/"; $md5 = md5_file( ROOT_DIR . "/uploads/" . $this->upload_path. FOLDER_PREFIX . $uploaded_filename ); $driver = 0; } Тут как бы в коде один хеш считается от размера, а второй реальный хеш файла. Этот баг так и был задуман? Можно же нормально посчитать хэш файла пока файл находится на хосте сайта, после загрузки, а так получается введение в заблуждение тех, кто их сверяет. Изменено 12 июня 2023 пользователем UnitDev Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 072 Опубликовано: 13 июня 2023 Рассказать Опубликовано: 13 июня 2023 15 часов назад, UnitDev сказал: Этот баг так и был задуман? Так задумано. 15 часов назад, UnitDev сказал: Можно же нормально посчитать хэш файла пока файл находится на хосте сайта Нельзя, точнее не всегда возможно, при ряде настроек хостингов, которые часто встречаются, это не получится. А также не всегда файл при загрузке попадает на хост, например при загрузке с внешнего URL, на хост с DLE он даже не попадает. 15 часов назад, UnitDev сказал: получается введение в заблуждение тех, кто их сверяет. Нужно просто уведомлять тех кто сверяет, по какому алгоритму нужно сверять. Цитата Ссылка на сообщение Поделиться на других сайтах
UnitDev 1 Опубликовано: 13 июня 2023 Рассказать Опубликовано: 13 июня 2023 Автор 2 часа назад, celsoft сказал: Нужно просто уведомлять тех кто сверяет, по какому алгоритму нужно сверять. С каких пор у md5 вариации начались? md5 файла это не то же самое что md5 от размера файла. Пока файл собирается из чанков в /uploads/files/, когда он дособран, его можно посчитать там, хотя правильнее всего было бы посчитать уже после загрузки на удалённый хост, но для этого его нужно либо выгружать обратно для подсчёта, либо на стороне удалённого хоста уже разместить служебный php файл, но так как сделано сейчас, это именно баг, потому что никакого md5 файла не подсчитывается, и он может быть таким же битым, и иметь такой же размер, тем более что при отправки и разбиение на чанки, не производится высчитывание хеша файла на стороне клиента, и последующей сверкой на стороне сервера. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 072 Опубликовано: 13 июня 2023 Рассказать Опубликовано: 13 июня 2023 59 минут назад, UnitDev сказал: С каких пор у md5 вариации начались? А кто сказал что это что выводимый хеш шаблонным тегом DLE это MD5 именно содержимого файла? DLE об этом нигде не обьявляет, кроме того что вы эту функцию увидели в файле. 59 минут назад, UnitDev сказал: Пока файл собирается из чанков в /uploads/files/, когда он дособран, его можно посчитать там, хотя правильнее всего было бы посчитать уже после загрузки на удалённый хост, но для этого его нужно либо выгружать обратно для подсчёта Он по вашему всегда собирается? Нет не всегда. Во первых он собирается только если файл превышает лимит при котором разбивать. Во вторых не при всякой загрузке он вообще поступает на локальный сервер. Я выше уже об этом написал. Поэтому чтобы алгоритм подсчета был всегда одинаковый применяется именно такой тип, а не для одного файла один, для другого другой и т.д. Поэтому привязка по хранилищу идет, которое не меняется от случая к случаю. А загрузка файлов может быть очень разной и зависит от разных ситуаций и случаев. Что то выгружать обратно с удаленного сервера это тоже глупая затея, потому что займет очень много времени для больших файлов, потратит много ресурсов сервера, плюс удаленные хранилища зачастую имеют тарификацию на скачивание, это значит еще и заплатить деньги за подсчет. Я понимаю что это может быть и нормальным для вас и у вас нет такой тарификации, но нам нужно думать о всех пользователях DLE, 99 процентам из который вообще плевать какой там хеш файла, они это не используют у себя. А нам нужно искать компромиссы между всеми пользователями. Это нужно понимать когда вы пользуетесь коробочной CMS. 59 минут назад, UnitDev сказал: либо на стороне удалённого хоста уже разместить служебный php файл Полная ерунда. Попробуйте выполнять PHP файл на S3 хранилище. Я посмотрю как это у вас получится. 59 минут назад, UnitDev сказал: но так как сделано сейчас, это именно баг Ваше мнение. Не буду вас переубеждать. Вы спросили специально это сделано или нет, я ответил что специально, и ответил почему так. А принимать это или нет, это уже ваш выбор. Это сделано так специально, потому как есть вещи когда по другому попросту не посчитать. Если вам не нравится как работает DLE с внешними хранилищами, ваши хранилища выполняют PHP коды или все ваши файлы именно разбиваются и собираются, и по URL не загружаются. То вы можете написать для себя свой плагин и изменить эту строчку и посчитать md5 содержимого файла, но это ваш выбор и ваш частный случай, он не применим ко всем сайтам. Не все же сайты работают так как ваш сайт, не все делают только то что делаете вы, и загружают файлы так как вы, и используют такие же хранилища как и вы. Я не утверждаю что не считать хеш по содержимому это как то правильно, я лишь говорю, что в ряде случаев это невозможно, поэтому алгоритм такой и привязан он к типу хранилища, если оно локальное и доступны все возможности он посчитает по содержимому, если а если оно удаленное то прочитать содержимое и построить по нему хеш не всегда представляется возможным, поэтому привязка идет по хранилищу, чтобы для всех файлов был алгоритм унифицирован. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.