У меня есть PHP-скрипт, и это будет выполняться только в том случае, если сам сервер называет его. Например: form (). Submit запускает запрос AJAX для отправки данных формы. Я не хочу разрабатывать хэш-декодирование и кодировать систему для подтверждения, если запрос разрешен или нет.
Есть ли простая возможность проверить, работает ли «сервер для запуска сценария» или клиент хочет запустить скрипт? Если нет, я могу использовать .htpasswd
Если вы используете apache, вы можете поместить свои скрипты в папку и добавить файл htaccess (.htaccess) со следующим содержимым
deny from all
Таким образом, когда пользователь пытается получить доступ к скрипту php напрямую, он получит только запрещенную страницу. Вы можете обращаться к файлам только с помощью include / require методов скрипта php, используемых на сервере.
Вы можете сделать это с помощью следующих шагов;
1) Поместите ваш php-скрипт вне вашего веб-документа root как /usr/local/phpscripts/
2) Запустите этот скрипт из своего кода;
$output = shell_exec('php /usr/local/phpscripts/your_script.php');
Делая это, только ваш сервер может вызвать ваш скрипт. Веб-пользователь не может получить доступ к этому скрипту php для выполнения
Скрипты, доступные пользовательскому агенту, должны находиться внутри docroot, иначе они полностью недоступны. Предполагая, что это структура вашего проекта:
public_html/ |-- index.php src/ |-- somefile.php
и если ваш корень документа установлен в каталог public_html
(через конфигурацию vhost), файлы внутри src
не могут быть доступны агентом пользователя. Поэтому только сервер может запускать их, требуя их в других сценариях.
Если вы хотите, чтобы ваш скрипт выполнялся при include()
вы можете установить переменную в скрипте include()
и проверить его в этом.
script1.php:
<?php $my_call = true; include('script2.php');
script2.php: (сценарий, который вы не хотите вызывать из браузера)
<?php if(!$my_call){die('Access Denied.');} //your code here...
В противном случае, если вы хотите использовать сценарий только из командной строки:
добавьте эту строку в самом начале вашего скрипта:
<?php if(php_sapi_name() !== 'cli'){die('Access denied.');} // your code next
Для комментариев ниже:
[root@xxxxx html]# cat test.php <?php echo php_sapi_name(); [root@xxxxx html]# php test.php cli
Теперь вызов этого же скрипта из браузера:
apache2handler