Доброго времени суток, Ув.Форумчане! Как запретить полностью запретить подключение к внешним URL для php-скриптов? Суть проблемы в том, что в файле php.ini стоит настройка безопасности, которая запрещает делать вроде Код (PHP): $url = 'http://www.yandex.ru'; include_once($url); Строчки из php.ini отвечающие за данную настройку: Код (PHP): allow_url_fopen = Off allow_url_include = Off если директива в php.ini включена то получим сообщение - Warning: include_once() [function.include-once]: URL file-access is disabled in the server configuration in G:\www\sitename.ru\index.php on line ... Однако данная директива не решает проблемы из-за возможности её обойти, благодаря включённым в последних версиях функции, которая благодаря такому функцию, позволяет вывести содержимое полученное от внешнего URL, прим: Код (PHP): $url = 'http://www.yandex.ru'; include_once($url); function file_get_contents_curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); $data = curl_exec($ch); curl_close($ch); return $data; } echo file_get_contents_curl($url); В некоторых CMS существует, что-то аналогичное, видимо для подгрузки новостной ленты, что приводит порой к подвисаниям и задержкам в работе сайта. Я бы хотел узнать, возможно ли выставление какой-нибудь более строгой директивы для запрета включения php-скриптам с внешнего URL-а данных - в php.ini, httpd.conf ... ? Сразу скажу, что лапатить весь код ради поиска "инъекций" не представляется возможным. Есть вообще какие-нибудь приемлемые варианты? . PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Может я что то путаю (зубной надомной не плохо поработал) но вроде как include и file_get_contents (file_get_contents_curl в curl) это разные вещи, в смысле делают разные штуки. include подключает файл для его дальнейшего использования. file_get_contents получает содержимое файла (или результат выполнения скрипта) в виде простого текста.
Ничего не путаете. Функции действительно различные. А зачем об этом рассуждать?! Рассуждения в данном ключе не суть вопроса... Пример с кодам показывает, возможность обхода директивы allow_url_fopen / allow_url_include Надо разобраться как отключить возможность скриптов, которые затесались (или могут затесаться) подключаться к внешним источникам. Есть доступ к файлам конфигурации. Отследить место скрипта тоже "вариант", но если подключения будут происходить от случая к случаю... Если скрипт попал в папку сервера - «то пусть в ней и "варится", нечего по чужим хатам соль собирать»
так file_get_contents (file_get_contents_curl в curl) он и создан для того, что бы получать контент удаленных страницы, хотя может и внутренних.
ну если ненужен curl то отключить его. и делов то Добавлено спустя 2 минуты 6 секунд: еще есть disable_functions и disable_classes
Код из сети можно загрузить с помощью fsockopen(), расширения socket и вызова системных утилит вроде: в данном примере, curl не связан с php и отключение в php не повлияет на работу утилиты. Даже если вы примите все возможные меры на сервере, это не спасет вас от возможности попадания в страницу вашего сайта javascript-кода, который сделает ajax-запрос или подгрузит другим способом php-код откуда-нибудь, и отправит этот код специальному php-скрипту на вашем сайте. Иначе говоря, если вы устанавливаете скрипт из ненадежного источника, то вы больше не можете быть уверены в безопасности ни капельки.
Кстати: директива disable_functions в php.ini никакого эффекта не имеет - "вообще ноль реакции". В оф.документации сказано, что в режиме Safe Mode она не работает. Хотя я честно сказать сомневаюсь, что у меня стоит данный режим..
интересно, можно ли юзеру или процессу запретить любую сетевую активность, кроме юниксовых сокетов? Это бы решило вопрос.
у меня сервер на Windows, можно сделать, чтобы файрволл брал на себя функцию, так и получается: когда php-скрипт пытается вытащить инфу из глобальной сети, то файрволл пищит.. у такого костыля есть массу недостатков, к примеру это может привести как зависанию движка CMS.
- Вы ж предлагали повысить навыки по настройке сервака до +999 уровня. Винда это самое - то что и надо. А unix-подобные системы тоже не панацея. Повелось как то, что мол: «Раз под юникс писалось, то и пахать на нём будет как часики». Времена не те уже. Сейчас уже понятия модульности, инкапсуляции есть..
В винде сервер можно все. Можно определить пользователя для пхп и в локальных политиках запретить сеть. Работать надо под IIS. Точно можно, но я не знаю как (