Установите права доступа к файлу php, чтобы можно было запустить только curl моего сервера - PullRequest
0 голосов
/ 17 апреля 2010

У меня есть PHP-скрипт, который я не хочу, чтобы кто-либо мог запускать через свой браузер.

Он отправляет электронные письма и вызывается через curl cron моего сервера, но должен находиться в общедоступном каталоге www.Какие права доступа или владельца мне нужно установить для файла, чтобы разрешить только (или я имею в виду чтение) файлу только мой сервер?

Я на санто.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 17 апреля 2010

Если вы можете, я бы порекомендовал сделать это по-другому: запустить скрипт через CLI (вызывая php -f в задании cron) и заставить скрипт PHP проверить, как он выполняется. Вы можете узнать, вызывается ли скрипт из интерфейса командной строки с помощью php_sapi_name () , и завершить его, когда он вызывается из Интернета. Насколько я понимаю, это было бы самое безопасное решение.

Если вам действительно нужно пройти через curl, используйте решение Джоша или определите ключ доступа, который необходимо добавить в сценарий, в качестве параметра get:

curl domain.com/script.php?password=123456

не очень безопасно, так как ключ доступа будет виден в crontab, но должен обеспечивать достойную защиту от доступа извне, особенно если вы сочетаете его с проверкой $_SERVER["REMOTE_ADDR"] и проверкой того, что это 127.0.0.1.

2 голосов
/ 17 апреля 2010

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

<?php
$password = $_GET['password'];
hash = '40bd001563085fc35165329ea1ff5c5ecbdbbeef'; //precalculated sha1 hash of your password
if (sha1($password) != $hash) {
    die('Forget it!');
}

Для дополнительной безопасности это может быть доработано, но вы поняли ...

0 голосов
/ 17 апреля 2010

Это невозможно, как сформулировано. Из того, что я могу сказать, я думаю, что есть несколько вариантов, которые вы могли бы использовать для решения вашей проблемы:

Вы можете выбрать пользователя root или другого пользователя, а затем chmod 700, а затем вызвать скрипт из cronjob, используя функции командной строки PHP из файла crontab владельца.

Если вам нужен доступ к файлу через curl, то вы попадаете на веб-сервер, и веб-сервер должен иметь возможность выполнять / читать сценарий, что позволит любому исполнить сценарий.

Другой вариант - использовать управление доступом на основе правил, как описано здесь: http://library.linode.com/web-servers/apache/access-control/rule-based-access, чтобы убедиться, что только соединения, исходящие с вашего сервера, смогут получить доступ к рассматриваемому файлу, но это само по себе не полностью идеально.

Конечно, есть и другие решения, но я надеюсь, что это полезно.

0 голосов
/ 17 апреля 2010

Почему бы просто не использовать php-cli для запуска из командной строки, а не через curl?

Если вам действительно нужно разместить его, вы можете сделать что-то подобное в вашем .htaccess

<Directory /your/path/>
Order allow,deny
Allow from 192.168.1.0/24
Allow from 127
</Directory>
...