Автор Тема: Проблем с РНР и fopen wrappers  (Прочетена 5088 пъти)

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Проблем с РНР и fopen wrappers
« -: Nov 08, 2010, 09:27 »
Здравейте,

Имам супер досаден проблем свързан с fopen wrappers - всички (или поне тези, които съм тествал) функции свързани с тях не работят. Ето един елементарен пример:
Код
GeSHi (PHP):
  1. $url='http://www.soapclient.com/xml/SQLDataSoap.WSDL';
  2. array('http'=>
  3. array('protocol_version'=> 1.0,
  4. 'ignore_errors' => true,
  5. 'max_redirects'=>1)));
  6. $result=file_get_contents($url, false, $ctx);
  7.  
В резултат $result е празен стринг - не е false, РНР-то не връща никаква грешка, просто не прави изобщо рекуест към отдалечения ресурс (file_get_contents работи с локални файлове, но не и с файлове сервирани от локалното апаче). Същото важи и примерно за функции като get_headers() и fopen(), променлива като $http_response_header - все са празни. Всъщност няма и как да не са празни след като сървъра, към който е насочено питането изобщо не получава нищо (установено е ана апач, който е под мой контрол - никакъв GET или POST request не стига до него в резултат на РНР кода).
Чрез cURL или fsockopen и ръчно сетнати хедъри нещата работят, но това не е решение - трябва да преборя file_get_contents($remote_url).
Естествено в php.ini имам
Код:
allow_url_include = On
РНР-то е 5.3.3 билднато от сорс, но и с 5.2.х проблема е същия.
Някакви идеи?
« Последна редакция: Nov 08, 2010, 16:35 от VladSun »
Активен

triel

  • Напреднали
  • *****
  • Публикации: 36
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #1 -: Nov 08, 2010, 09:35 »
Погледни дали allow_url_fopen е "on".
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Проблем с РНР и fopen wrappers
« Отговор #2 -: Nov 08, 2010, 10:23 »
Погледни дали allow_url_fopen е "on".

Стига бе, това е супер unsecurity...
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

triel

  • Напреднали
  • *****
  • Публикации: 36
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #3 -: Nov 08, 2010, 11:09 »
Стига бе, това е супер unsecurity...

Всъщност това, което senser е направил (а именно да позволи allow_url_include) е много по-голям проблем за сигурността. Ама наистина много.

От друга страна, той съвсем ясно е казал, че желае да ползва file_get_contents за remote files, така че единствената му опция е да позволи allow_url_fopen - независимо дали е secure, или не.
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3397
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #4 -: Nov 08, 2010, 13:39 »
И защо allow_url_fopen да е unsecurity... Това е принципът на интернет - да се отварят URL-и. Пък било то локално или отдалечено, какво общо има. Ако някой иска да прави мизерии даже и при забранено allow_url_fopen, може да си отвори URL-а с Curl.

Когато се отваря URL по този начин не се сервира оригиналният source файл *.php например, а резултатът от изпълнението му, така че няма никакви проблеми.

тук писах за нещо подобно.
http://www.linux-bg.org/forum/index.php?topic=37789.0

говорите за две опции allow_url_include и allow_url_fopen.
allow_url_fopen трябва да е разрешено.
Активен

Perl - the only language that looks the same before and after encryption.

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Проблем с РНР и fopen wrappers
« Отговор #5 -: Nov 08, 2010, 13:44 »
Цитат
If enabled, allow_url_fopen allows PHP's file functions -- such as file_get_contents() and the include and require statements -- can retrieve data from remote locations, like an FTP or web site. Programmers frequently forget this and don't do proper input filtering when passing user-provided data to these functions, opening them up to code injection vulnerabilities. A large number of code injection vulnerabilities reported in PHP-based web applications are caused by the combination of enabling allow_url_fopen and bad input filtering.

allow_url_fopen is on by default.

Recommendations

You should disable allow_url_fopen in the php.ini file:

; Disable allow_url_fopen for security reasons
allow_url_fopen = 'off'
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #6 -: Nov 08, 2010, 14:09 »
Съжалявам - грешката е моя. В php.ini имам
Код:
allow_url_fopen = On
а не
Код:
allow_url_include = On

Наистина няма смисъл да коментираме в момента сигурността - невъзможността да работя с fopen wrappers ми пречи в АПИ-тата, които ползвам и, които няма да тръгна да променям всичките, та нека видим на какво може да се дължи това. Ако представлява интерес може впоследствие да обясня какви точно са ми проблемите, но след доста дълбаене стигнах до извода, че РНР-то ми не може да отваря отдалечени ресурси и отттам се омазват много неща.
« Последна редакция: Nov 08, 2010, 14:12 от senser »
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3397
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #7 -: Nov 08, 2010, 15:23 »
Това 'ignore_errors' => true, какво трябва да прави?
Спомням си че и аз имах много главоболия с file_get_contents. Докато го нагласиш да работи, пробвай винаги да си разпечатваш $http_response_header.
Активен

Perl - the only language that looks the same before and after encryption.

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #8 -: Nov 08, 2010, 16:27 »
Това 'ignore_errors' => true, какво трябва да прави?
Спомням си че и аз имах много главоболия с file_get_contents. Докато го нагласиш да работи, пробвай винаги да си разпечатваш $http_response_header.
ignore_errors прави това, което се очаква - при възникване на грешка я игнорва и продължава, но това не е проблем. С или без този параметър функцията не работи.
Аз досега никога не съм имал проблем с file_get_contents - винаги е работел както съм очаквал - подозирам, че при мен нещо РНР-то не е ОК, но пък и няколко версии компилирах вече и няма разлика .........
Както казах вече, масива $http_response_header винаги е празен просто, защото request до отдалечената страна изобщо не стига.
« Последна редакция: Nov 08, 2010, 16:30 от senser »
Активен

triel

  • Напреднали
  • *****
  • Публикации: 36
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #9 -: Nov 08, 2010, 16:56 »
Някакви fancy firewall rules, забраняващи изходящи връзки на потребителя, който е стартирал PHP скрипта?
Активен

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #10 -: Nov 08, 2010, 17:04 »
Някакви fancy firewall rules, забраняващи изходящи връзки на потребителя, който е стартирал PHP скрипта?
Не мисля. Апача с РНР-то работи на лаптопа ми, който ползвам за работа, а той през ВИФИ е в нета. Пробвах и забучих директно кабела в лаптопа, заобикаляйки OpenWRT- to и евентуално някой iptables rule, но положението е същото.
Обърни внимание, че дори и да опитам нещо като file_get_contents('http://localhost/test') пак фейлва. А в апача изобщо не се вижда някой да се опитва да достъпи /test.
Не е от това според мен.
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3397
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #11 -: Nov 08, 2010, 17:12 »
Когато тествах с file_get_contents, симулирах разпаднала връзка като откачаx кабела - тогава file_get_contents връщаше false и $http_response_header беше празен.

затова те питах за ignore_errors => true предполагам че като е ignore_errors => false, file_get_contents вече няма да връща празен стринг а ще започне да връща false.

Т.е и аз си мисля че нещо пречи на изходящият трафик.
« Последна редакция: Nov 08, 2010, 17:21 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #12 -: Nov 08, 2010, 17:57 »
Когато тествах с file_get_contents, симулирах разпаднала връзка като откачаx кабела - тогава file_get_contents връщаше false и $http_response_header беше празен.

затова те питах за ignore_errors => true предполагам че като е ignore_errors => false, file_get_contents вече няма да връща празен стринг а ще започне да връща false.

Т.е и аз си мисля че нещо пречи на изходящият трафик.

Промяната на този параметър не променя по никакъв начин нещата. Без изобщо да сетвам stream context пак е същото. На другите машини никъде не съм го сетвал даже, просто в момента се мъча по някакъв начин да разбера къде може да е проблема и затова има stream_context_create
Активен

d0ni

  • Напреднали
  • *****
  • Публикации: 183
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #13 -: Nov 08, 2010, 19:40 »
ако си с линукс защо не извикаш php файла през CLI и да го strace-неш, така има голяма вероятност да видиш къде е проблемът.
Активен

senser

  • Напреднали
  • *****
  • Публикации: 1328
    • Профил
Re: Проблем с РНР и fopen wrappers
« Отговор #14 -: Nov 08, 2010, 20:01 »
ако си с линукс защо не извикаш php файла през CLI и да го strace-неш, така има голяма вероятност да видиш къде е проблемът.
Нямам инсталиран strace,  но го пуснах през gdb и си мина нормално - без грешки и file_get_contents пак връща празен стринг. Според мен проблема не е в бъг на РНР-то, а по-скоро някаква сбъркана конфигурация или знам ли и аз вече ...........

Ето phpinfo(): http://senser.no-ip.org/phpinfo.php

П.П. След малко ще го пусна и през strace и ще дам резултат
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
fopen i https s PHP
Общ форум
blind_fish 3 3124 Последна публикация Jul 26, 2002, 16:40
от