Запустите script.php на задании cron на сервере linux/apache, но ограничьте публичный доступ к файлу php
У меня есть это script.php файл, который я хочу запустить как задание cron на моем сервере linux/apache.
Однако я не хочу, чтобы публичный доступ www.mycompanyname.com/script.php а также запустить сценарий одновременно.
Как мы можем предотвратить это? Как мы можем ограничить доступ скрипта только к серверу? Использует ли он chmod или устанавливает что-то внутри файла .htaccess, что-то в этом роде?
Есть какие-нибудь советы?
4 answers
У вас, вероятно, есть что-то вроде каталога public_html
, в котором у вас есть все phps. Просто поместите его за пределы этого каталога.
Вы можете сделать это как первую строку PHP в script.php
...
if (PHP_SAPI !== 'cli') {
exit;
}
Если кто-то попадет в ваш скрипт через HTTP, PHP_SAPI
будет cgi
, я полагаю, а не cli
, что приведет к немедленному завершению вашего скрипта.
Конечно, это зависит от вашего вызова cron php script.php
.
Вы также можете отправить...
header('HTTP/1.0 404 Not Found');
...или, конечно, оставьте его за пределами вашего корневого каталога.
Если вы поместите скрипт за пределы папки webroot, он не будет доступен через ваш веб-сервер. например , ваш веб-каталог находится по адресу /var/www/public_html/ вы кладете script.php за пределами этой папки, например: /var/www/
Способ 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