Как определить что скрипт запущен локально

Discussion in 'PHP' started by pretolock, 21 May 2009.

  1. pretolock

    pretolock New Member

    Joined:
    16 May 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Как сдалать проверку в PHP скрипте 1 что он запущен из скрипта 2, который находится на томже сайте
    Т.е. нужно запретить запуск скрипта 1 удаленно и из других скриптов, если они используют хостинг, этого же сервера

    if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR'])
    предотвращает только удаленный запуск
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    В первом файле
    PHP:
    define('l_include',1);
    Во втором первыми строками:
    PHP:
    if (!defined('l_include')) die;
     
    _________________________
  3. pretolock

    pretolock New Member

    Joined:
    16 May 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    а что мешает воспользоваться хостингом на томже серваке и написать:
    PHP:
    define('l_include',1);
    в чужом скрипте, а потом вызвать мой скрипт который должен быть запущен локально на моем хостинге?
     
  4. -=Static=-

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    Если ты никому не расскажешь, что у тебя константа для проверки называется "l_include" - то никто и не догадается, что надо именно ее объявить. А если уже прочли скрипт, например через file_priv в sql-inj - то тут практически никакая проверка не спасет :)

    Вот еще мысль: Можно сделать проверку полного пути от корня сервера, чтоб быть уверенным что скрипт Б инклудят из скрипта в твоей папке. Например так:
    PHP:
    <?
    $docRoot "/www/home/myfolder/public_html";
    if(
    $_SERVER["DOCUMENT_ROOT"] != $docRoot) die("You try to include my script from another fucking server");

    // ...
    ?>
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    pretolock Не позволит нормально настроенный сервер/права на файл. Если злоумышленнику удалось заинклудить/прочитать исходный текст скрипта - ни одна защита не спасет (кроме быть может самописных библиотек-расширений ПХП)

    -=Static=- На переменные нельзя надеяться. Например:
    PHP:
    echo $_SERVER["DOCUMENT_ROOT"].'<hr>';
    $_SERVER["DOCUMENT_ROOT"] = 'some trash dir';
    echo 
    $_SERVER["DOCUMENT_ROOT"];
     
    _________________________
  6. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    а делов то..
    PHP:
     if ( $_SERVER['SERVER_NAME'] == 'localhost' OR
          
    $_SERVER['SERVER_ADDR'] == '127.0.0.1') {
          print 
    'local run';
     } else {
          print 
    'remote run';
     }
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Угу, в своем скрипте перед инклудом твоего скрипта дописываешь
    $_SERVER['SERVER_NAME'] = ....;
    $_SERVER['SERVER_ADDR'] = ....;

    И способ не работает
     
    _________________________
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    eLWAux Достаточно неожиданно, но условие будет выполняться всегда ^^ Во всяком случае server_addr :D Да и вообще - зачем читать хотя бы первый пост до конца?
     
    _________________________
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    m0Hze Зачем угадывать? Инклудим файл с генератором, инклудим интересующий файл.

    Опять таки - если есть возможность читать/инклудить чужой файл - бесполезно это баловство на чистом пхп
     
    _________________________
    1 person likes this.
  10. pretolock

    pretolock New Member

    Joined:
    16 May 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    я думаю сделать так:
    - скрипт который должен запустить локальный скрипт генерирует случайное число
    - записывает его в файл
    - вызывает локальный скрипт и передает ему в URL'e это случайное число
    - локальный скрипт сравнивает случайное число из URL'а со случайным числом прочитанным из файла
    - локальный скрипт удаляет файл со случайным числом

    как такая схема?
     
  11. pretolock

    pretolock New Member

    Joined:
    16 May 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    добавлю еще к условию вызова, что скрипт который должен вызывать локальный скрипт запустить сложно, если его просто так вызвать)
    такчто вызвать вызывающий скрипт чтобы он сгенерировал случайные данные будет проблематично
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    А еще можно отрезать сервер от интернета и электричества, а потом залить бетоном. Если такая паранойя - купите вдску и будет вам счастье
     
    _________________________