Php 如何保护json

Php 如何保护json,php,json,Php,Json,因此,我有一个主页,它从JSON链接获取数据,并基于该数据填充下拉列表。我的问题是,目前任何人都可以访问打印json的URL,我想保护它,以便只有服务器和服务器上运行的页面可以访问json输出 我想比较一下PHP服务器变量,比如remote_addr和server_addr,但是remote_addr是客户端IP,而不是服务器 做这件事的好方法是什么 谢谢您提到的安全问题被称为,虽然现在有些浏览器包括,但在其他浏览器中仍然是一个问题 幸运的是,有一个相当简单的解决方案。要理解它,我们首先需要了解

因此,我有一个主页,它从JSON链接获取数据,并基于该数据填充下拉列表。我的问题是,目前任何人都可以访问打印json的URL,我想保护它,以便只有服务器和服务器上运行的页面可以访问json输出

我想比较一下PHP服务器变量,比如remote_addr和server_addr,但是remote_addr是客户端IP,而不是服务器

做这件事的好方法是什么


谢谢

您提到的安全问题被称为,虽然现在有些浏览器包括,但在其他浏览器中仍然是一个问题

幸运的是,有一个相当简单的解决方案。要理解它,我们首先需要了解攻击是如何工作的。
实际上,第三方站点不可能通过XMLHTTPRequest简单地请求您的JSON文件并以正常方式解析它,因为这将被同源策略阻止。
因此,攻击者所做的是在JavaScript中重新定义object setter函数,将任何新对象的值返回到自己的代码中,然后创建一个引用JSON文件的新标记。加载JSON后,浏览器将执行它,创建一个新对象,并将值返回给攻击者的对象设置程序处理程序。攻击者现在拥有您的数据

为了防止这种情况,您需要做的是使JSON代码无法直接作为JavaScript解析。如果这样做,您希望使其抛出错误。
实现这一点的一种常见方法(谷歌和Facebook等网站使用)是在JSON文件的开头添加代码,这将创建一个无限循环,防止解析器访问其余代码(并抛出JavaScript错误)


例如,Facebook的JSON响应以(;;)的字符串
开头
,而Google使用各种代码位,如
while(1)
抛出(1) 您提到的安全性问题称为,虽然一些浏览器现在包括,但在其他浏览器中仍然是一个问题

幸运的是,有一个相当简单的解决方案。要理解它,我们首先需要了解攻击是如何工作的。
实际上,第三方站点不可能通过XMLHTTPRequest简单地请求您的JSON文件并以正常方式解析它,因为这将被同源策略阻止。
因此,攻击者所做的是在JavaScript中重新定义object setter函数,将任何新对象的值返回到自己的代码中,然后创建一个引用JSON文件的新标记。加载JSON后,浏览器将执行它,创建一个新对象,并将值返回给攻击者的对象设置程序处理程序。攻击者现在拥有您的数据

为了防止这种情况,您需要做的是使JSON代码无法直接作为JavaScript解析。如果这样做,您希望使其抛出错误。
实现这一点的一种常见方法(谷歌和Facebook等网站使用)是在JSON文件的开头添加代码,这将创建一个无限循环,防止解析器访问其余代码(并抛出JavaScript错误)


例如,Facebook的JSON响应以(;;)的字符串
开头
,而Google使用各种代码位,如
while(1)
抛出(1);简而言之:不可能。您首先是如何验证/授权用户的?如果有一个身份验证cookie,我想cookie也会包含在AJAX请求中,对吗?你应该基于此进行验证。根本不要公开你的API。忘记用PHP代码做这件事;在防火墙/DNS/基础设施级别关闭端口和路由。此处的响应可能会有一些混乱。。。定义“在服务器上运行的页面”。您的客户端用户是否从浏览器请求这些数据?或者它真的只有在服务器端访问吗?请提供更多信息,最好是一个小的代码示例,说明您的意思。为什么要这样做?简而言之:不可能。您首先是如何验证/授权用户的?如果有一个身份验证cookie,我想cookie也会包含在AJAX请求中,对吗?你应该基于此进行验证。根本不要公开你的API。忘记用PHP代码做这件事;在防火墙/DNS/基础设施级别关闭端口和路由。此处的响应可能会有一些混乱。。。定义“在服务器上运行的页面”。您的客户端用户是否从浏览器请求这些数据?或者它真的只有在服务器端访问吗?请提供更多的信息,最好是一个小的代码示例来说明您的意思。为什么要这样做?
function parseJSON(json) {
   json = json.replace("for(;;);", "");
   /* parse your JSON as usual */
}