Как защитить php-файл только для задач cron? - PullRequest
2 голосов
/ 28 марта 2012

Я понимаю, что есть похожие посты, но будьте уверены, это не дубликат поста!

У меня есть сайт на сервере Godaddy.У меня нет доступа к корневому каталогу моего сервера (все общедоступно).

У меня есть файл delete.php, который должен работать на CRON, и только на CRON.Файл не должен выполняться кем-либо вручную по какой-либо причине.

Учитывая вышесказанное, я стараюсь максимально обезопасить свой файл, поэтому давайте проведем этот эксперимент в области безопасности.

Пока что у меня есть следующее с целью сделать файл максимально безопасным:

<?php
$isCLI = ( php_sapi_name() == 'cli' );

if (!$isCLI) {
    die("cannot run!");
} else {
    if(!isset($_SERVER['REQUEST_METHOD'])){
        // Do the task here
    }else{
        die("cannot run!");
    }
}
?>

Итак, это логически безопасно?Как это можно сделать еще более безопасным?Godaddy может только разрешить мне установить дату / время для запуска файла, ничего более.

Ответы [ 2 ]

5 голосов
/ 28 марта 2012

Проверка на cli SAPI достаточна; пользователь, выполняющий его через apache (будь то mod_php или fastcgi или cgi), никогда не будет вызывать PHP через CLI-интерфейс. Вы можете избавиться от уродливого else {} вокруг вашего реального кода; если вы exit; в конце блока , тогда нет необходимости в блоке else .

Однако, вообще не помещать такой скрипт в корень документа. Если это невозможно, рассмотрите возможность использования .htaccess:

Order deny,allow
Deny from all

Если файлы находятся в папке, которую не следует блокировать полностью, оберните эти строки в <Files whatever.php>...</Files>

1 голос
/ 28 марта 2012

Конечно, размещение этих файлов вне webroot было бы предпочтительным способом сделать это. С другой стороны, вы можете создать .htaccess, который определяет правило Deny all для всего доступа. Таким образом, Deny all запрещает прямой доступ к серверу, но PHP CLI все равно сможет получить к нему доступ.

...