我通过goDaddy控制中心创建了一个cron作业。
cron作业位于“cron jobs”文件夹中。
我不希望任何人能够运行它,我应该如何设置文件夹的权限,以便它不能公开打开,但它仍然可以用于cron作业?
取消选中公开>阅读是否足以阻止任何人运行它?
答案 0 :(得分:9)
只需将文件放在webroot / document根文件夹之外。
答案 1 :(得分:5)
在.htaccess中添加此内容。
<Location /cronjobs>
order deny,allow
deny from all
allow from 127.0.0.1
</Location>
我在127.0.0.1中包含allow,因此它可以从服务器运行,即cron仍然可以运行。
答案 2 :(得分:1)
将它放在一个目录中,并在该目录中创建一个名为.htaccess
的文件,其中包含:
<FILESMATCH "\.php$">
order deny,allow
deny from all
</FILESMATCH>
现在只有服务器可以访问该目录中的PHP文件。例如,include
或require
。
这对于保持MySQL密码安全很有用,您可以将连接函数放在这个“受保护”目录中的PHP文件中,并将其包含在脚本中。
答案 3 :(得分:1)
您拥有的一个选项是使用$ _SERVER值来查看它是Web请求还是cli请求。
请参阅http://php.net/manual/en/reserved.variables.server.php
我会查看是否在脚本开头设置了$_SERVER['argv']
值。如果未设置则退出脚本。
或者,您可以查看是否设置了$_SERVER['SERVER_ADDR']
,这意味着它正在由网络服务器执行。
请注意,我没有使用godaddy帐户进行测试,因此请确保在上线前进行验证。
答案 4 :(得分:1)
另一种可能的解决方案,如果该文件仅用作include()
,而不是由在网址中输入该文件的用户单独运行。
将此代码放在要阻止直接调用的文件的顶部。
if(basename($_SERVER['PHP_SELF']) == 'blockedFile.php')
{
header('Location: ./index.php');
exit();
}
PHP检查文件的名称是否是直接运行的名称。如果在带有include()
的index.php中包含了blockedFile.php,那么basename($_SERVER['PHP_SELF'])
将等于index.php。如果它是独立的,它将等于blockedFile.php并将用户发送回索引页面。