Рейтинг:0

Почему хосты отключают PHP fpassthru()?

флаг ru

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

Большинство хостинг-провайдеров, с которыми я тестировал свой продукт, работали просто отлично, включая общие мультитенантные хостинговые среды. Тем не менее, я нашел несколько, которые имеют fpassthru() функция "отключена по соображениям безопасности". Я часами исследовал, почему кто-то может отключить fpassthru функцию, но не такие функции, как fopen, фред, file_get_contents, а также файл для чтения, но я не мог найти ничего полезного.

Возможно, это звучит глупо, но, по моему мнению, эти хосты отключены. fpassthru принимая это за пройти, что действительно требует отключения, особенно в общих средах. Сказав это, фактический пройти функцию (вместе с исполнитель и остальная часть семьи) также были отключены на этих хостах.

Я попытался связаться с этими хостами и спросил их, почему.

Я не мог получить прошлые продажи в Flywheel, они сказали, что не могут ответить на мой вопрос, и только поддержка может. А для того, чтобы обратиться в службу поддержки, я должен стать клиентом. Классический.

Сначала RunCloud казался немного более многообещающим, я дозвонился до «Системного инженера 3-го уровня», и еще несколько дней потребовалось, чтобы добраться до «Старшего системного инженера», от которого я получил следующее заявление:

это лучшая практика для PHP в RunCloud, и это лучшая практика для нас

Я попросил их уточнить, но давно ничего не слышал, поэтому потерял надежду.

Просто чтобы уточнить, я не ищу обходных путей fpassthru(). Я ищу причины, по которым он иногда указывается рядом с «опасными» функциями, такими как выполнение(), система(), пройти(), pcntl_fork() и другие, имея прочитать файл(), file_get_contents()и т.д. работают просто отлично.

Если у вас есть какие-либо идеи, пожалуйста, поделитесь!

флаг jp
вы, вероятно, хотите спросить об этом на https://security.stackexchange.com/
флаг cn
Что произойдет, если вы запросите смещение вне диапазона файла? Читает ли он произвольную память?
флаг ru
@ shearn89 shearn89 вы не можете явно указать смещение в fpassthru(). Он читает с того места, где находится текущий указатель на EOF. Для фактического смещения вам придется использовать fread() из fseek().
Рейтинг:1
флаг cn
Bob

Не стоит недооценивать силу карго-культовых программистов и системных администраторов.

У провайдеров в прошлом могли возникать определенные проблемы, требующие отключения определенной функции, и они просто продолжают делать это сегодня просто потому, что их компания «всегда так поступала». И никто из тех, кто там работает, сейчас не знает фактического исторического события, послужившего причиной этого.
Не говоря уже о том, что это рассуждение остается верным и сегодня.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.