我在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
}
但......这是否应该?
所以问题:
我使用的方法是保护json / ajax处理程序 脚本?
任何建议/解释为什么http_referrer不起作用?
答案 0 :(得分:0)
$_SERVER['SERVER_ADDR'] == $_SERVER['REMOTE_ADDR']
以检查请求是否来自同一服务器。不要相信$_SERVER['HTTP_X_FORWARDED_FOR']
,因为它很容易修改。除此之外,你应该仔细考虑设计。为什么不能直接从第一个PHP脚本(现在包含curl)访问数据? json.php如何生成它的输出,你可以将这个逻辑替换/包含在你的第一个PHP脚本中吗?