Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php API请求分发和安全性_Php_Javascript_Ajax_Json_Api - Fatal编程技术网

Php API请求分发和安全性

Php API请求分发和安全性,php,javascript,ajax,json,api,Php,Javascript,Ajax,Json,Api,我正在做一个分布式API请求的实验。我正在用PHP建立一个网站,允许我的用户代表服务器发出请求。通过这样做,我应该能够将请求分发给所有用户,并允许我的应用程序即使在流量很大的情况下也保持可伸缩性 我的最终目标是让浏览器发出API请求,解析响应并将解析后的数据提交到我的服务器。这将消除应用程序当前面临的性能瓶颈。然而,我对如何构建这个系统有疑问 以下是我对系统工作的设想: 用户访问网站 API请求队列是从工作列表加载的 浏览器从工作队列发出多个API请求并解析响应 浏览器通过AJAX将解析数据发送

我正在做一个分布式API请求的实验。我正在用PHP建立一个网站,允许我的用户代表服务器发出请求。通过这样做,我应该能够将请求分发给所有用户,并允许我的应用程序即使在流量很大的情况下也保持可伸缩性

我的最终目标是让浏览器发出API请求,解析响应并将解析后的数据提交到我的服务器。这将消除应用程序当前面临的性能瓶颈。然而,我对如何构建这个系统有疑问

以下是我对系统工作的设想:

  • 用户访问网站
  • API请求队列是从工作列表加载的
  • 浏览器从工作队列发出多个API请求并解析响应
  • 浏览器通过AJAX将解析数据发送到服务器
  • 服务器更新旧数据,添加时间戳,并从工作队列中删除请求
  • 在预先确定的TTL工作之后,再次将其添加到队列中并重复该过程
  • 以下是我的担忧:

    • API请求不是在与我的服务器相同的域上进行的。我理解,当从用户浏览器请求数据时,这将出现问题(因为同源策略)。我已经研究过使用代理PHP文件,但这也引起了一些关注——请参阅我的下一个要点
    • 分发解析只是问题的一部分,另一个问题是限制我的请求。我每秒可以发出的请求数量有限,这导致了可伸缩性问题。我担心,通过创建代理文件来发出请求,我仍然受到请求限制的限制,因为从技术上讲,请求仍然是通过代理文件从我的服务器发出的
    • 由于浏览器正在解析响应并将其发送到我的服务器,因此很可能有人会通过AJAX调用将恶意数据注入服务器
    最后是我的问题:

    • 根据我的要求,使用代理PHP文件是发出这些请求的最佳方法吗
    • 如果使用代理文件是最好的方法,我仍然会受到请求限制,还是请求(以及相应的限制)会传递给客户端
    • 除了标准的安全措施(转义字符串、删除斜杠和使用SSL)之外,您还可以考虑在AJAX到服务器的通信中采取其他预防措施吗
    • 有人已经这样做了吗?如果是的话,有没有我可以效仿的例子?我已经到处搜索过了,我的搜索措辞肯定不正确,因为我的所有结果都与我的要求无关
    • 最后是一些可选的意见问题。。。你对这种方法有什么想法?这一结构是否存在致命缺陷?有没有更好的方法来实现我的目标

    提前感谢您的帮助

    我最终解决这个问题的方法是使用JSONP并通过客户端浏览器加载内容。以下是流程:

    • 客户端访问站点并接收API请求URL列表。这些URL嵌入了脚本标记(以绕过同源策略)。使用JSONP方法,数据作为包含数据对象的回调函数返回
    • JSONP数据然后在一个私有函数中解析客户端,以避免客户端的操作,并发送给AJAX处理程序。我还为额外的安全性在处理程序中添加了转义和验证
    • 处理程序将解析后的数据连同时间戳一起提交给MySQL。如果进行了插入,则为指定的条目更新工作队列。CRON作业定期运行清理例程来更新队列并将其设置为缓存阵列。从该数组中提取新URL并重复该过程
    在做了一些测试之后,我发现我的问题如下:

    • 代理文件只是代表客户机发出请求。由于服务器正在发出请求,因此仍将受到限制
    • 我发现的唯一能够从客户端浏览器窗口发出请求的方法是JSONP、CORS和WebSockets。CORS和WebSocket并不是在每个浏览器中都可用,所以我没有这样做。JSONP有一个内容长度限制,但我并没有解析每个客户端的大量数据,只是解析了大量的数据作为一个整体——这就是我选择JSONP的原因。解析iFrame也会起作用,但我找不到在大多数浏览器中都能起作用的解决方案。最后,我想添加多种获取数据的方式,以确保尽可能多的用户在分发中共享数据
    • 有许多API支持JSONP和CORS!事实上,我很惊讶有这么多人。当API不支持它时,它可能会变得有点棘手,但当我遇到它时,我会跨越这座桥
    • 我仍然想知道是否有人认为这个方法在某些方面存在致命的缺陷,但是我觉得使用像JSONP这样的东西比使用定制的脚本解决方案要舒服得多