假设我有一个 PHP 脚本,可以为我检索 JSON 数据:
<?php
header('Content-Type:application/json; charset=utf-8');
$url = "http://ipinfo.io/" . $_SERVER['REMOTE_ADDR'] . "/json";
echo file_get_contents($url);
如何在 JavaScript 中解析这些数据?
最佳答案
因此,查看数据样本,我们看到 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 服务器将数据注入(inject)到 HTML 中,也可能存在潜在的漏洞(我不确定)。 Web 服务器中可能存在一个弱点(同样,不确定),其中可能会发生缓冲区溢出,然后它可以将代码注入(inject)到 Web 服务器中,例如导致它创建可以远程执行的文件。
因此,网络上有很多文章介绍如何在将数据发送到浏览器之前先对其进行完善和测试。这超出了您的问题范围,但要记住这一点非常重要。
以下是有关如何从 PHP 验证 JSON 的一些信息:
关于javascript - PHP 脚本检索 JSON 文件 - 如何将其传递给 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34542175/