我有一个PHP脚本,这只能运行,如果服务器本身调用它。 像这样:form()。submit运行一个AJAX请求来POST表单数据。 我不想开发一个散列解码和编码系统来certificate请求是否被允许。
是否有一个简单的可能性来检查,如果“服务器运行脚本”,或者如果客户端要运行脚本? 如果没有,我可以使用.htpasswd
如果您使用的是Apache,您可以将您的脚本放在一个文件夹中,并添加一个htaccess文件(.htaccess)以下内容
deny from all
这样当用户试图直接访问php脚本时,他们只会得到一个禁止的页面。 您只能通过在服务器中使用的php脚本的include / require方法访问文件。
你可以通过以下步骤做到这一点。
1)把你的PHP脚本放在你的web文档根目录之外,如/usr/local/phpscripts/
2)从你的代码运行这个脚本,如:
$output = shell_exec('php /usr/local/phpscripts/your_script.php');
通过这样做,只有你的服务器可以调用你的脚本。 Web用户不能访问这个PHP脚本来执行
用户代理可用的脚本必须位于docroot内部,否则它们完全不可用。 假设这是你的项目结构:
public_html/ |-- index.php src/ |-- somefile.php
并假设您的文档根目录设置为public_html
目录(通过虚拟主机配置),则src
内的文件不能被用户代理访问。 因此,只有服务器可以通过在其他脚本中要求它们来运行它们。
如果你只想在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