Должен ли я разрешить allow_url_fopen в PHP?

У нас есть пара разработчиков, которые просят включить allow_url_fopen на нашем сервере. Что является нормой в наши дни, и если libcurl включен, действительно ли есть какие-либо веские основания для этого?

Среда: Windows 2003, PHP 5.2.6, FastCGI

Я бы не делал это. В то же время большинство атак на основе PHP предполагают, что на хосте работает Linux, поэтому некоторые из них в любом случае терпят неудачу.

tacone 06.03.2011 16:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
34
1
81 988
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Вы определенно хотите, чтобы allow_url_include был отключен, что также снижает многие риски allow_url_fopen.

Но поскольку не все версии PHP имеют allow_url_include, для многих лучше всего отключить fopen. Как и все функции, реальность такова, что если она вам не нужна для вашего приложения, отключите ее. Если вам это действительно нужно, модуль curl, вероятно, может сделать это лучше, и рефакторинг вашего приложения для использования curl для отключения allow_url_fopen может отпугнуть наименее решительного взломщика.

Привет, Бен, я видел довольно много случаев, когда переменные передаются в include () (или fopen ()), которые, по мнению разработчика, ссылаются на локальный файл, но вместо этого они являются URL-адресами, ссылающимися на вредоносный PHP-код, хранящийся за пределами сайта. Я могу придумать несколько разумных причин, по которым кто-то может захотеть включить ("http: // .."), и, следовательно, реальная безопасность улучшается за счет отключения этой функции. См. en.wikipedia.org/wiki/Remote_File_Inclusion

Daniel Papasian 20.01.2010 00:13

@Ben James: Некоторое время назад нас взломали из-за падения безопасности в нашем современном коммерческом пакете форумов, а также в другом устаревшем программном обеспечении. Отключение allow_url_include и allow_url_fopen остановило почти каждую атаку.

tacone 06.03.2011 16:08

Почему использование libcurl может быть безопаснее, чем использование file_get_contents (), если я загружаю тот же URL и использую данные таким же образом? Это то же самое. Так же, как использование libcurl и eval () для загруженного контента вовсе не безопаснее, чем использование include () внешнего URL-адреса. Это просто фальшивая «безопасность за счет раздражения», как Windows Vista дважды спрашивает вас, действительно ли вы действительно хотите запустить эту программу.

Michał Tatarynowicz 03.07.2013 09:42

Так ли это до сих пор?

oldboy 23.03.2018 04:59

В ответ на вопрос «Почему использование libcurl может быть безопаснее, чем использование file_get_contents ()», дело в том, что код часто использует file_get_contents() для открытия локального файла, поэтому разрешение удаленного открытия приводит к вектору атаки, который относительно легко использовать (это просто берет одну необработанную переменную ...). Если вы используете знать, вы имеете дело с удаленным URL-адресом, тогда следует использовать cURL, и вы правы, в этом случае нет никакой разницы в последствиях для безопасности.

HappyDog 21.03.2019 19:20

Атаки с использованием межсайтовых сценариев - это боль, так что это голосование против. И вам обязательно нужно выключить "allow_url_include", иначе вас ждет целый мир боли.

AFAIK это не имеет ничего общего с XSS, а с загрузкой локальных файлов.

Moradnejad 31.07.2017 07:35

Я думаю, ответ сводится к тому, насколько вы доверяете своим разработчикам ответственно использовать эту функцию? С данными из внешнего URL-адреса следует обращаться как с любым другим ненадежным вводом, и если это понятно, что в этом такого?

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

Это зависит от типа застройки. Если ваше прототипирование, то включение allow_url_fopen - это нормально, однако существенной разницы в скорости между libcurl и file_get_contents нет, и включение этого параметра - только вопрос удобства.

Для производственных серверов любой вызов libcurl должен быть помечен для аудита безопасности. То же самое должно быть с fopen и file_get_contents, если 'allow_url_fopen' включен. Отключение allow_url_fopen не предотвращает эксплойтов, а лишь немного ограничивает количество способов, которыми они могут быть выполнены.

Большая проблема заключается в том, что allow_url_fopen не более защищен, поэтому, если вы хотите сохранить файл с URL-адреса с помощью curl, вы должны перейти из fopen / file_get, чтобы сохранить файл.

  • CURL is only good to retrieve remote content from URL. (allow_url_fopen not necessary)
  • CURL must be added with Fopen or File_get if you want to save remote file to your server. (allow_url_fopen obligatory with CURL)

Php должен найти другие способы сделать его более защищенным.

Это просто неправильно; вы можете сохранить файл без включения allow_url_fopen, даже если вы получили контент с помощью Curl.

El Yobo 29.01.2013 03:27

Другие вопросы по теме