Запустите script.php на задании cron на сервере linux/apache, но ограничьте публичный доступ к файлу php


У меня есть это script.php файл, который я хочу запустить как задание cron на моем сервере linux/apache.

Однако я не хочу, чтобы публичный доступ www.mycompanyname.com/script.php а также запустить сценарий одновременно.

Как мы можем предотвратить это? Как мы можем ограничить доступ скрипта только к серверу? Использует ли он chmod или устанавливает что-то внутри файла .htaccess, что-то в этом роде?

Есть какие-нибудь советы?

Author: TooTone, 2010-11-26

4 answers

У вас, вероятно, есть что-то вроде каталога public_html, в котором у вас есть все phps. Просто поместите его за пределы этого каталога.

 2
Author: cambraca, 2010-11-26 03:19:22

Вы можете сделать это как первую строку PHP в script.php...

if (PHP_SAPI !== 'cli') {
    exit;
}

Если кто-то попадет в ваш скрипт через HTTP, PHP_SAPI будет cgi, я полагаю, а не cli, что приведет к немедленному завершению вашего скрипта.

Конечно, это зависит от вашего вызова cron php script.php.

Вы также можете отправить...

header('HTTP/1.0 404 Not Found');

...или, конечно, оставьте его за пределами вашего корневого каталога.

 9
Author: alex, 2010-11-26 03:18:38

Если вы поместите скрипт за пределы папки webroot, он не будет доступен через ваш веб-сервер. например , ваш веб-каталог находится по адресу /var/www/public_html/ вы кладете script.php за пределами этой папки, например: /var/www/

 6
Author: Populus, 2010-11-26 03:20:19

Способ 1.

Если вы выполняете PHP непосредственно из задания Cron, например, php/path/to/your_script.php затем добавьте следующую строку в верхней части вашего PHP-скрипта:

if (php_sapi_name() !='cli') exit;

Способ 2.

Если задание Cron использует wget, curl или lynx для запуска вашего скрипта по своему URL-адресу, вставьте этот код в начало вашего PHP-скрипта (измените строку Агента пользователя на одну, известную только вам):

if ($_SERVER['HTTP_USER_AGENT'] != 'yourSecretAgent') exit;

Вам также нужно будет установить Агента пользователя в задании Cron; как в этом примере wget:

wget -O - --user-agent=“yourSecretAgent” http://example.com/your_script.php
 0
Author: Muhammad Tahir, 2018-05-31 05:17:27