php код из адресной строки

Тема в разделе "Как сделать...", создана пользователем sunyang, 4 апр 2012.

  1. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    Есть пустой php файл.
    Можо как-то волнить php код из адресной строки.

    Может как-то исользуя eval() ?

    Например \index.php?a=eval(...)
     
  2. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    что значит пустой :) ? у него размер = 0 или он ничего не выводит ?

    код из адресной строки в очень редких случаях конечно можно выполнить, но это только если внутри php-скрипта уже есть соответствующий код, например такой:
    PHP:
    eval($_GET[a]);
     
  3. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    еще стоит добавить, что на большинстве shared-хостах eval() и подобные отключены из соображений безопасности.
     
  4. BACZ

    BACZ

    Регистр.:
    18 июн 2008
    Сообщения:
    608
    Симпатии:
    381
    eval нельзя отключить, это не функция а конструкция языка.
     
  5. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    правильно, правда если php c Suhosin Patch то там такая фича имеется
     
  6. Бобр Добр

    Бобр Добр

    Регистр.:
    17 янв 2010
    Сообщения:
    242
    Симпатии:
    37
    PHP:
    <?php
    /*
    $code = "<?php echo 'Hi'; ?>" ;
    echo base64_encode($code); // PD9waHAgZWNobyAnSGknOyA/Pg==
    */
     
    $param 'code';
    $get str_replace($_SERVER['SCRIPT_NAME'].'?'.$param.'=','',$_SERVER['REQUEST_URI']);  //строка с кодом в base64;
     
    $handle fopen('new.php','w');
    fwrite($handle,base64_decode($get));
    fclose($handle);
    header("Location: new.php");
    http://test/index.php?code=PD9waHAgZWNobyAnSGknOyA/Pg==
    Пройдя по такой ссылке получим редирект на new.php в который будет записан php код переданный в GET.

    PHP:
    <?php
    $param 
    'code';
    if(@
    $_GET['code']){  //Ecли что то есть в параметрах то... поехали!
     
        
    $get base64_decode(str_replace($_SERVER['SCRIPT_NAME'].'?'.$param.'=','',$_SERVER['REQUEST_URI']));  //строка с кодом
        
    $file str_replace('/','',$_SERVER['SCRIPT_NAME']);
        
    //Считываем что есть в журнале
        
    $TMP0 fopen('log','a+');
        
    $cahe stream_get_contents($TMP0);
        
    fclose($TMP0);
     
        
    //Перезаписываем в журнал новые параметры
        
    $TMP fopen('log','w+');
        
    fwrite($TMP,$get);
        
    fclose($TMP);
     
        
    //Читаем содержимое этого файла
        
    $index fopen($file,'a+');
        
    $oldIndex stream_get_contents($index);
        
    fclose($index);
     
        
    //Перезаписываем текущий файл новым содержимым
        
    $newIndex str_replace($cahe,'',$oldIndex);
        
    $newFile =  $newIndex.$get;
        
    $index2 fopen($file,'w+');
        
    fwrite($index2,$newFile);
        
    fclose($index2);
     
     
     
     
    header("Location: index.php");
    }
     
    ?>
    Этот код редиректит сам на себя.

    PHP:
    <?php
    $param 
    'code';
    if(@
    $_GET['code']){  //Ecли что то есть в параметрах то... поехали!
        
    $get base64_decode(str_replace($_SERVER['SCRIPT_NAME'].'?'.$param.'=','',$_SERVER['REQUEST_URI']));  //строка с кодом
        
    eval ($get);
    }
    ?>
    с использование eval НЕ НУЖНО писать '<?php ?>'
     
  7. shaen

    shaen Постоялец

    Регистр.:
    23 июн 2011
    Сообщения:
    51
    Симпатии:
    9
    Интересно что Вы пытаетесь сделать, что хотите использовать eval для запуска параметров из гета:), если хотите использовать этот скрипт в кроне то на мой взгляд логичнее передавать команды с определенными ключами, скрипт обрабатывает команды и ключи и выполняет требуемые операции ну как то так.