我正在使用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作业将无法正常工作,那么我可以使用什么来保护最终用户的价值。感谢。
答案 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...');