因此,查看数据样本,我们看到 URL:
http://ipinfo.io/104.111.103.12/json
演出:
{
"ip": "104.111.103.12",
"hostname": "a104-111-103-12.deploy.static.akamaitechnologies.com",
"city": "Cambridge",
"region": "Massachusetts",
"country": "US",
"loc": "42.3626,-71.0843",
"org": "AS35994 Akamai Technologies, Inc.",
"postal": "02142"
}
因此:
<?php
$sIP = $_SERVER['REMOTE_ADDR'];
if ($sIP == '127.0.0.1') { // like testing at home on your own workstation
$sIP = '104.111.103.12'; // use a dummy one just for this demo
}
$sURL = "http://ipinfo.io/" .$sIP . "/json";
$sJSON = file_get_contents($sURL);
$view = (object) array();
$view->JSON = $sJSON;
?><!DOCTYPE html>
<html>
<head>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<script type="text/javascript">
// global string of Data
var gsData = <?= $view->JSON ?>
$(document).ready(function(){
var sRegion = gsData.region;
$('#result').html(sRegion);
});
</script>
<div>Region from data is:</div>
<div id="result"></div>
</body>
</html>
...在我的家庭工作站网络服务器(当前 IP 为 127.0.0.1)上显示此结果:
Region from data is:
Massachusetts
现在,您要做的就是永远不要信任数据。假设一个黑客超越了 ipinfo.io 并且 JSON 不再变成 JSON,而是一些恶意的东西。这意味着它可以从客户端浏览器端将恶意代码插入您的网站,例如破坏网站或使其重定向到一些充满恶意软件的非常糟糕的网站。
在将数据发送到客户端浏览器之前,PHP 通过 Web 服务器将数据注入 HTML 中也可能存在潜在的漏洞(我不确定)。 Web 服务器中可能存在一个弱点(同样,不确定),其中可能会在那里完成缓冲区溢出,然后它可以将代码注入 Web 服务器,例如使其创建可以远程执行的文件。
因此,网络上有很多文章介绍如何在将数据发送到浏览器之前先对其进行润色和测试。这超出了您的问题范围,但要记住这一点非常重要。
这里有一些关于如何从 PHP 验证 JSON 的信息:
Validate json in php