За последние 24 часа нас посетили 23160 программистов и 1659 роботов. Сейчас ищут 868 программистов ...

Запретить выполнение скрипта в браузере

Тема в разделе "PHP для новичков", создана пользователем Griffter, 7 ноя 2017.

  1. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Добрый день всем!
    Возникло у меня 2 вопроса:
    1. Есть скрипт, который должен выполняться по крону. Как запретить его выполнение в браузере, и оставить доступ к нему только для крона?
    2. Так же запретить выполнение скрипта в браузере, но разрешить обращаться к нему боту месседжера Телеграм?
    Подскажите пожалуйста, как это правильно делается? А то раньше как-то не приходилось с таким сталкиваться...
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Griffter, например, в зависимости от информации, предоставленной php_sapi_name()
    Можно так-же где-нибудь определить какую-нибудь константу и проверять её наличие/отсутствие...
     
    Griffter нравится это.
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Просто разместить его вне публичной папки
     
    Griffter нравится это.
  4. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Всегда возвращает "cgi-fcgi", хоть с браузера я обращаюсь, хоть с крона, хоть телеграм присылает данные...
    А вот на счет идентификатора - это идея. Повесил вебхуки телеграма с get параметром, который буду проверять у себя на стороне. Всё работает. Большое спасибо за помощь!

    Я это первым делом пробовал сделать. Для крона это решение прокатывает, он отрабатывает нормально. А вот при обращение с Телеграма логирует "client denied by server configuration:"...
    Вам тоже большое спасибо за подсказку.

    Пусть пока работает с идентификатором, правда не знаю насколько это правильно вообще...
     
  5. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    телеграм, когда обращается, какие-то параметры передает?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    у тебя по крону через http:// обращение идёт? если нет, то это ненормально, что cgi-fcgi. cli и cgi это разные вещи.
     
  7. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Да, получаю такие параметры:
    Код (Text):
    1. object(Telegram\Bot\Objects\Update)#19 (1) {
    2.   ["items":protected]=>
    3.   array(2) {
    4.     ["update_id"]=>
    5.     int(349320791)
    6.     ["message"]=>
    7.     object(Telegram\Bot\Objects\Message)#23 (1) {
    8.       ["items":protected]=>
    9.       array(5) {
    10.         ["message_id"]=>
    11.         int(2265)
    12.         ["from"]=>
    13.         object(Telegram\Bot\Objects\User)#27 (1) {
    14.           ["items":protected]=>
    15.           array(5) {
    16.             ["id"]=>
    17.             int(507935014)
    18.             ["is_bot"]=>
    19.             bool(false)
    20.             ["first_name"]=>
    21.             string(3) "Max"
    22.             ["last_name"]=>
    23.             string(8) "Max"
    24.             ["language_code"]=>
    25.             string(5) "ru-RU"
    26.           }
    27.         }
    28.         ["chat"]=>
    29.         object(Telegram\Bot\Objects\Chat)#28 (1) {
    30.           ["items":protected]=>
    31.           array(4) {
    32.             ["id"]=>
    33.             int(507935014)
    34.             ["first_name"]=>
    35.             string(3) "Max"
    36.             ["last_name"]=>
    37.             string(8) "Max"
    38.             ["type"]=>
    39.             string(7) "private"
    40.           }
    41.         }
    42.         ["date"]=>
    43.         int(1510060677)
    44.         ["text"]=>
    45.         string(43) "Получить идентификатор"
    46.       }
    47.     }
    48.   }
    49. }

    Позже проект будет перенесен на VPS и тогда уже будет настраиваться нормально, а на данный момент он находиться на обычном хостинге для тестирования. На хостинге есть свой крон, у которого выставляются параметры:
    Выберите способ запуска (Браузер или PHP интерпретатор)
    - если использовать настройку "браузер", тогда выбирается протокол передачи и путь к скрипту. В этом случае скрипт будет запускаться
    как http://site.ru/public_html/cron.php
    - если выбрать "интерпретатор PHP", тогда выбирается версия PHP и путь к скрипту. Запуск будет по /home/lunar/domains/site.ru/public_html/cron.php
    Но хоть как его не запускай, всё равно приходит "cgi-fcgi"...
    Может просто хостинг такой корявый...
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    ну так вот тебе и рычаг. Есть параметры - работаем, нет параметров - редирект и exit;
    --- Добавлено ---
    или так:
    ложишь скрипт выше доменной папки. А в доменной папке, где тебе удобно, лежит другой скрипт, который принимает параметры от бота. Если параметров нет, то редирект и exit;
    если есть - то инклюишь файл, который выше доменной папки.
    а из крона дергаешь его на прямую.
     
    Griffter нравится это.
  9. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Да, вполне логично. Что-то я вообще об этом не подумал...
    Большое спасибо за подсказку!
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    перепроверь себя. другие конечно тоже могут ошибаться, но более вероятно что ошибаешся ты :) с уверенностью 99%
    крон при обращении через файловую систему должен использовать cli.

    по опыту разбора 1001 косяка здесь на форуме, проблема обычно оказывается в суетливости поциента и нежелании вникать в подсказки.

    в случае телеграма, конечно это будет доступ через веб. так что, возможно тебе и не нужна проверка веб / не веб. только на длостаточность и достоверность параметров. может ещё и по белому списку IP стоит ограничить.
     
    Griffter нравится это.
  11. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Я бы конечно хотел ошибаться, но не в этот раз.
    Не знаю как правильно пруфы показать...
    В общем запущено сейчас 2 крона: один использует браузер, другой - интерпретатор. В логах обращений показывается только один крон, который использует браузер (и это логично в принципе)
    Код (Text):
    1. 176.9.139.114 - - [07/Nov/2017:17:36:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0"
    2. 176.9.139.114 - - [07/Nov/2017:17:37:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0"
    3. 176.9.139.114 - - [07/Nov/2017:17:38:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0"
    4. 176.9.139.114 - - [07/Nov/2017:17:39:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0"
    5. 176.9.139.114 - - [07/Nov/2017:17:40:01 +0300] "GET /cron/index.php HTTP/1.1" 200 3201 "-" "curl/7.33.0"
    А в логах по запуску скрипта записывается:
    Код (Text):
    1. 2017-11-07 17:36:01 - cgi-fcgi
    2. 2017-11-07 17:36:01 - cgi-fcgi
    3. 2017-11-07 17:37:01 - cgi-fcgi
    4. 2017-11-07 17:37:01 - cgi-fcgi
    5. 2017-11-07 17:38:01 - cgi-fcgi
    6. 2017-11-07 17:38:01 - cgi-fcgi
    7. 2017-11-07 17:39:01 - cgi-fcgi
    8. 2017-11-07 17:39:01 - cgi-fcgi
    9. 2017-11-07 17:40:01 - cgi-fcgi
    10. 2017-11-07 17:40:01 - cgi-fcgi
    В одно и тоже время есть по две записи, так как отработало 2 разных крона, вот только интерфейс одинаковый у них...
    Может конечно это смутное доказательство, но я не знаю как по другому проверить.
     
  12. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    А вот на OpenServer`e локальном всё нормально показывает.
    Код (Text):
    1. 2017-11-07 18:25:58 - apache2handler
    2. 2017-11-07 18:26:19 - cli
    3. 2017-11-07 18:32:01 - cli
    apache2handler - при использовании браузера
    cli - при запуске скрипта вручную через cmd и при запуске кроном.
     
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    как всё сложно ))) а такой вариант - настоящий крон тупо не работает, поэтому нет данных о нём - ты рассматривал?
     
  14. Griffter

    Griffter Новичок

    С нами с:
    27 сен 2017
    Сообщения:
    92
    Симпатии:
    25
    Не, ну крон в любом случае работает и один и второй. Я пробовал способы и по отдельности их запускать и на других скриптах. Вот только не понятно каким методом оно его запускает, когда выставляешь запуск с помощью "Интерпретатора PHP". Странно в общем это всё...
    В любом случае спасибо! В дальнейшей разработке учту все эти моменты.
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Должен CLI.