Назад | Перейти на главную страницу

Сделать php-файл доступным только для запланированных задач

У меня есть несколько файлов php, которые предназначены для запуска только из запланированной задачи. Я не хочу, чтобы кто-либо имел доступ к этим файлам, вводя URL-адрес в браузере или каким-либо другим способом ... Есть ли способ сделать этот файл доступным только для запланированных задач? Я использую панель управления plesk ...

Вы можете просто поместить рассматриваемый файл (ы) за пределы DocRoot (например, в /home/yourusername/cronscripts вместо того /home/yourusername/public_html/cronscripts). Тогда ваш веб-сервер не сможет получить доступ к файлам.*.

.htaccess также является распространенным подходом и имеет преимущество перед первым вариантом работы, даже если вы не используете командную строку PHP для запуска задания. Обычно вы используете Allow и Deny операторы, чтобы ограничить, какой исходный IP-адрес (а) может достичь заданного фрагмента кода.

В качестве последнего варианта или если вам нужно получить доступ к сценарию из нескольких мест или мест с изменяющимися IP-адресами, рассмотрите возможность использования общего секрета с помощью кода, например:

if ( !isset($_GET['secretpass'])
  || $_GET['secretpass'] != 'hmAPcrkqjDhMkJw' )
{
    //Try to be fancy ("HTTP" response is for mod_php, "Status:" is for FastCGI)
    header("HTTP/1.1 404 Not Found");
    header( "Status: 404 File Not Found" );
    exit(0);

    //Or, if you'd rather, you can just:
    die( "Unauthorized access." );
}

Затем, когда вы вызываете скрипт, только вы знаете правильный параметр, который нужно прикрепить к концу (http://somehost.com/somescript.php?secretpass=hmAPcrkqjDhMkJw).

*: Если, конечно, вы явно не настроите для этого отдельный скрипт или символическую ссылку, но сейчас мы просто педантичны.

Если ваша запланированная задача использует командную строку php, вы можете использовать htaccess, чтобы запретить доступ к каталогу, в котором находится ваш файл php (или самому файлу php).

Блок htaccess будет выглядеть примерно так:

<Files yourphpfile.php>
    order allow,deny
    deny from all
</Files>

Просто поместите это в файл .htaccess в каталог с вашим файлом php.

Вы хотите создать .htaccess файл с некоторыми правилами для ограничения доступа к этим файлам. Это повлияет на Apache, когда он будет обслуживать файлы через http, но не повлияет на локальный сервер и такие вещи, как запуск php-кода для доступа к файлам.

В документации Apache есть подробности для Файлы блокируются здесь и запретить директиву здесь. Антонисомерсет избил меня до пример в его ответ.