Крон и хтаксессы

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

Аватар пользователя wanders.32 wanders.32 12 июня 2008 в 15:39

http://drupal.ru/cron.php
хтаксесс поставьте-то?
после небольших экспериментов, стало понятно, что не на всех друпалсайтах выставлен запрет, и крон можно запускать ручками - то есть можно положить сайт?

Комментарии

Аватар пользователя wanders.32 wanders.32 12 июня 2008 в 17:04

На это можно "положить"
подробнее?
повесь пару задач с большими обьемами данных в крон, и радуйся, как кто-то ее N раз запустит. и совсем это не создаст нагрузки на сервак.
я не прав?

Аватар пользователя VladSavitsky VladSavitsky 12 июня 2008 в 18:17

Да, вы не правы.
Вызов cron.php может сдалать только юзер с номером 1 (то есть суперпользователь Друпал), который создаётся первым при установке.

Аватар пользователя PanDa777 PanDa777 12 июня 2008 в 19:38

Это, вроде, относится только к update.php. Да и то это поведение можно изменить через settings.php

Ограничение доступа к cron.php "прямо из дистрибутива" несколько неправильно, ибо, например, лишает возможности использовать внешние cron-планировщики. Так что любое решение не будет лучше правильной настройки .htaccess

Аватар пользователя WiseMan WiseMan 13 июня 2008 в 11:38

Топикстартер в чем-то прав, как полагаю. Тоже не раз задумывался о безопасности запуска cron.php. Ведь для корректной работы права на исполнение и просмтр файла должны быть "внешними".

А про .htaccess это делается так:

заменяем в стандартном .htaccess запись

<FilesMatch "\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$">
  Order allow,deny
</FilesMatch>

на

<FilesMatch "\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|cron\.php)$">
  Order allow,deny
</FilesMatch>

т.е. добавив cron\.php в запрещенные к просмотру файлы

Если же у вас нет ресурсоемких задач перед кроном, то атака именно на cron.php, о которой подразумевается, будет не более опасной чем на сайт в целом.

Может кто из спецов по безопасности здесь есть. Подскажите как обстоит дело на самом деле и что лучше предпринять для защиты?

Аватар пользователя WiseMan WiseMan 14 июня 2008 в 21:45

Как же вы будете при такой записи запускать cron?

Ага, поторопился :).

Надо добавить разрешение для определенного источника. Об этом кратко написано в ссылке данной VladSavitsky, постом выше.

Но на практике указание локального адреса не всегда сработает, т.к. запуск крона производится в нашем случае из "внешнего источника". Другими словами решение может быть такое такое. Стандартную запись не меняем! А просто добавляем в .htaccess:

<FilesMatch "^(cron\.php)$">
  Order allow,deny
  allow from ip-адрес
</FilesMatch>

Вероятней всего это будет ip-адрес вашего сайта. Смотрите по логам сервера откуда идет обращение к файлу cron.php через крон.

Аватар пользователя kosilko kosilko 29 августа 2008 в 15:45

Я наверное чего-то не понимаю. Почему все так боятся запуска крона? В код common.inc кто-нибудь смотрел?
function drupal_cron_run(), - логика явная: больше чем раз в 1 час его запустить не получится.

<?php
if (time() - $semaphore > 3600) {
// Either cron has been running for more than an hour or the semaphore
// was not reset due to a database error.
watchdog('cron', t('Cron has been running for more than an hour and is most likely stuck.'), WATCHDOG_ERROR);

// Release cron semaphore
variable_del('cron_semaphore');
}
else {
// Cron is still running normally.
watchdog('cron', t('Attempting to re-run cron while it is already running.'), WATCHDOG_WARNING);
}
?>

Аватар пользователя PanDa777 PanDa777 30 августа 2008 в 11:15

Логика такая - больше чем раз в час его запустить не получится. Если он перед этим не завершил работу. В конце работы cron переменная 'cron_semaphore' удаляется. То есть, $semaphore == 0.