php脚本阻止直接访问

时间:2012-01-25 09:45:05

标签: php

我正在使用ajax从php脚本中获取价值(例如cost.php),我知道直接访问它并获得该值很容易。我甚至在相同的脚本(cost.php)上运行cron作业,所以如果我使用以下cron作业将不起作用...

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  //code here
  die('Invalid Request!');
}

这是否是安全的预防方法,如果我使用上述代码,cron作业将无法正常工作,那么我可以使用什么来保护最终用户的价值。感谢。

4 个答案:

答案 0 :(得分:4)

为了分开执行cronjob,您可以考虑使用php_sapi_name

一个简单的用法(更可靠,取决于服务器端变量): -

if (php_sapi_name() == "cli") // via cronjob or via cli
{
  die("invalid request");
}

PS:常量PHP_SAPI带有相同的值,因此您可以重写为: -

if (PHP_SAPI == "cli")
{
  die("invalid request");
}

答案 1 :(得分:0)

if (!eregi('cost.php',basename($_SERVER["REQUEST_URI"]))) { die('access denied'); }

答案 2 :(得分:0)

为cronjob使用密码

if (isset($_REQUEST['cronpw']) && $_REQUEST['cronpw'] == 'supersecret')
{
    // this is the cronjob
}
else
{
    // this not
}

答案 3 :(得分:0)

在代码顶部添加此项以停止直接脚本访问。

if (!defined('BASEPATH')) exit('No direct script access allowed');

如果您想允许AJAX请求,

if (!defined('BASEPATH') &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
exit('You are not allowed here...');