cron.php: ограничение доступа

Главные вкладки

Аватар пользователя cristobal-junta cristobal-junta 16 мая 2009 в 1:33

Не знаю, сталкивался ли у кто-нибудь с такой проблема, но определенно она может возникнуть: злоумышленник способен подвесить сайт, постоянно обращаясь к файлу cron.php. Поэтому хорошо бы закрыть к нему доступ со стороны. В грядущей 7-й версии Drupal'а решение этой проблемы отдают на откуп ядру (кажется, при обращении по адресу http://example.com/cron.php можно будет указывать уникальный ключ, известный только владельцу сайта).

Итак, нам потребуется возможность править файл .htaccess, расположенный в корне директории, в которой установлен Drupal. Если такой возможности нет, то нужно просить администратора прописать эти настройки для вашего виртуального хоста.

В конце файла .htaccess пишем следующее:

<Files "cron.php">
  Order Deny,Allow
  Deny from all
  Allow from localhost
  Allow from 127.0.0.1
  Allow from xxx.xxx.xxx.xxx
  Allow from yyy.yyy.yyy.yyy
</Files>

Что здесь есть что:

  • <Files "cron.php">...</Files> — доступ к файлу cron.php веб-сервер будет контролировать индивидуально; между этими тегами (<Files "cron.php"> и </Files>) помещаются команды, специфичные только для доступа к файлу cron.php
  • Order Deny,Allow — порядок, в котором выполняются указываемые далее директивы:
    • сначала будут просмотрены все директивы Deny, и «в первом приближении» доступ к файлу будет запрещенв тех случаях когда они «срабатывают»: в данном случае «срабатывает» директива Deny from all — запретить доступ абсолютно всем
    • далее просматриваются директивы Allow; они «перекрывают» выставленные ранее директивы Deny: в данном случае доступ к cron.php будет открыт с вашего сервера (Allow from localhost и Allow from 127.0.0.1) и с вашего домашнего/рабочего компьютера (Allow from xxx.xxx.xxx.xxx); также почти наверняка нужно будет указать и внешний адрес вашего сервера (Allow from yyy.yyy.yyy.yyy), если вы автоматизировали запуск cron-процедур с помощью crontab

Подробнее о директивах .htaccess см. Google: «apache directive»

И да, не забудьте заменить xxx.xxx.xxx.xxx и yyy.yyy.yyy.yyy на соответствующие IP-адреса.

Комментарии

Аватар пользователя kukuxa kukuxa 15 ноября 2009 в 3:46

если хостер не дает возможности разогнаться с .htaccess, то можно в cron.php дописать вначале файла:

<?php
if($_SERVER['REMOTE_ADDR'] !== 'айпи сервера')
exit();
?>

что значит не выполнять дальше скрипт, если ваш айпи не равен айпи вашего сервера.
и адсином с admin/reports/status вручную тоже будет запускаться.

узнать айпи вашего сервака можно например так:

<?php
var_dump
($_SERVER['REMOTE_ADDR']);
?>