保护json生成脚本/处理程序以获取ajax请求

时间:2014-03-17 20:49:03

标签: php ajax json curl

我在my site . com的json.php中生成json消息。我在php脚本中发出cURL请求并将会话ID作为cookie发送。因此脚本看到该用户(请求此脚本)已获得授权,脚本会为他打印json。

php脚本:

$ch = curl_init($json_url);
$ses_id = session_id(); 
$cookie = 'PHPSESSID='.$ses_id.';';
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$json = curl_exec($ch);
curl_close($ch);

#working with json data

json.php:

if($_SESSION['UserAuthorized']) {
    #print json there
}

这是否适用?我在想不,并试图为这个页面添加一些防御。我考虑过检查IP或推荐人。 IP:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
var_dump($ip);

在本地服务器上所有工作正常,但在托管它显示不是127.0.0.1(不是localhost,而是一些ip)。我使用虚拟主机,这就是我遇到问题的原因。

$_SERVER['HTTP_REFFERER']无论如何都没有显示任何内容(使用浏览器打开或使用cURL发送http请求):

$ref = $_SERVER['HTTP_REFFERER'];
var_dump($ref);

输出为NULL。

关于ajax请求。我可以使用下一个:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
#add/delete/edit db for ex etc
}

但......这是否应该?

所以问题:

  1. 我使用的方法是保护json / ajax处理程序 脚本?

  2. 任何建议/解释为什么http_referrer不起作用?

1 个答案:

答案 0 :(得分:0)

  1. 您可以验证$_SERVER['SERVER_ADDR'] == $_SERVER['REMOTE_ADDR']以检查请求是否来自同一服务器。不要相信$_SERVER['HTTP_X_FORWARDED_FOR'],因为它很容易修改。
  2. 只有拥有推荐人才能设置推荐人。如果您直接呼叫页面(在浏览器中卷曲或键入URL),或者如果您在浏览器中禁用了referrer-header,则不会将其发送到服务器。
  3. 除此之外,你应该仔细考虑设计。为什么不能直接从第一个PHP脚本(现在包含curl)访问数据? json.php如何生成它的输出,你可以将这个逻辑替换/包含在你的第一个PHP脚本中吗?