PHP & cron: проблемы безопасности - PullRequest
7 голосов
/ 08 декабря 2010

Какой лучший способ гарантировать, что только CRON выполняет PHP-скрипты, а не кто-то еще, кто наткнулся на ваши php-скрипты ..

Я думал о Переменной Пароля .... но это законная команда CRON? :

/usr/local/bin/php -f /home/mysite/public_html/dir/script?password=12345

Таким образом, люди не могут выполнять те же команды при посещении скрипта PHP через HTTP (если они не знают пароль)

Спасибо.

Ответы [ 6 ]

14 голосов
/ 08 декабря 2010

Вы должны хранить этот файл вне public_html

/usr/local/bin/php -f /home/mysite/script 
// is secure from public access
1 голос
/ 08 декабря 2010

Предположим, что если вы не хотите, чтобы кто-нибудь запускал файл через http, установите cron с помощью команды php, как вы делаете, и добавьте htacess в папку cron, чтобы заблокировать запрос http в папку, добавив

Откажитесь от всех для htacess

Предположим, если вы хотите, чтобы папка cron была защищена паролем, это можно сделать, как указано в URl

http://www.elated.com/articles/password-protecting-your-pages-with-htaccess/

0 голосов
/ 08 декабря 2010

Наличие пароля может работать, но:

  • Писать пароль в вашем crontab - плохая идея, потому что другие локальные пользователи могут прочитать его
  • Ваш синтаксис победил 'не работает (он попытается запустить сценарий «script? пароль = 12345». Параметры не могут быть названы в сценарии оболочки, поэтому вам придется запустить «script.php 12345»

AПравильным решением было бы проверить в вашем PHP-скрипте, что текущая среда похожа на ту, которую предоставляет cron при запуске команд. Переменные среды, специфичные для cron, могут помочь вам убедиться, что ваш скрипт запускается fby cron, а не пользователем.

0 голосов
/ 08 декабря 2010

Или вы можете заблокировать выполнение по IP сделать что-то вроде этого:

($ _ SERVER ['REMOTE_ADDR'] == "127.0.0.1") или умри ("NO ACCESS");

0 голосов
/ 08 декабря 2010

Вы можете отправлять параметры в файл PHP через командную строку. Просто не так, как вы думаете.

http://www.php.net/manual/en/reserved.variables.argc.php

Однако вы также хотите сохранить это в общедоступной html-папке, как говорят другие. Таким образом, вы не можете путешествовать по ним. PHP, запускаемый из командной строки, не обязательно должен находиться в какой-либо папке просмотра веб-сервера.

0 голосов
/ 08 декабря 2010

Не помещайте скрипт в ваш каталог public_html (или где-либо еще в корневом каталоге вашего документа), если вам нужно только запустить его из cron. Это действительно так просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...