当前位置: 首页 > 面试题库 >

允许跨域ajax请求

乐正涵意
2023-03-14
问题内容

在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展。
我在脚本顶部仅添加了以下两行,以使它们能够做到:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');

现在我的问题是:这里是否遗漏了任何安全方面的考虑?这个简单的解决方案会带来严重的问题吗?
如果是这样,什么是更好的解决方案?

感谢您的回复。


问题答案:

如上所述,任何人都可以随时向您的页面发送请求:因此,您需要考虑的主要安全问题是验证用户输入并仅显示可供公众使用的信息。但这适用于所有脚本。

您需要关注的两个主要问题(在验证用户输入之后)是:

  1. 您可能遇到的问题是用户将信息接收到他们的脚本中。取决于浏览器(甚至在同一浏览器的样式之间),存在不同的安全规则,这些规则会阻止它们获取信息。一个常见的解决方案是将信息返回为“ JSONP”,这会将您的返回值包装为可以由客户端执行的函数调用。这是一个简单的示例(摘自http://www.geekality.net/2010/06/27/php-how-to-easily-provide-provide-json-and-jsonp/)。为了进一步锁定它,您可以坚持认为所有查询都是JSONP并拒绝未发送回调函数的任何人。

<?php

header('content-type: application/json; charset=utf-8');
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
echo $_GET['callback'] . '('.json_encode($data).')';

?>
  1. 有人因过于定期致电而滥用您的服务。解决方案是捕获IP地址,如果从IP地址收到的呼叫过多,则拒绝。并非万无一失,但这只是一个开始。

要记住的其他因素:

  • 您的脚本设置的cookie和其他标头可能会被忽略
  • 同样适用于会议


 类似资料:
  • 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展<我只是在我的脚本顶部添加了这两行,让他们完成这项任务: 现在我的问题是:这里有我错过的任何安全考虑吗?这个简单的解决方案会产生严重的问题吗? 如果是,更好的解决方案是什么? 感谢您的回复。

  • 我试图从我的新Angular应用程序中调用REST web服务。当发出请求时,我会得到以下错误: XMLHttpRequest无法加载http://localhost:8080/WebService。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源“http://localhost”。 我发现这是因为浏览器不允许这样的操作。 编辑我也试着把它添加到我的angular应用程序中:

  • 问题内容: 我有从本地主机运行的webapp(由于调试),它发出了跨域AJAX请求。我可以轻松地为Chrome设置标志“ –disable-web- security”,并且webapp可以在Chrome中按预期工作。但是我也需要在Windows上的Safari中执行此操作。是否有一些类似的标志,或者可以在“首选项”中的某个位置进行设置? 感谢帮助。 问题答案: 解决方案是在服务器上设置标头。 在

  • 问题内容: 除了JSONP,为什么要遵循相同的域策略? 问题答案: 出于安全原因,已实施“同源起源策略”;引用维基百科的相关句子: 这种机制对现代Web应用程序具有特殊的意义,因为Web服务器广泛依赖于HTTP cookie来维护经过身份验证的用户会话,因为服务器基于HTTP cookie信息进行操作以揭示敏感信息或执行状态更改操作。 必须在客户端维护不相关站点提供的内容之间的严格分隔,以防止丢失

  • 问题内容: 如何使用XDomainRequest正确重写Ajax请求以使其在IE 8 +中工作? 问题答案: 将此插件用于IE8-9 Xdomain支持。 https://github.com/MoonScript/jQuery-ajaxTransport- XDomainRequest

  • 问题内容: curl -v -X POST -H “Authorization: Basic ” -k -d “grant_type=password&username= &password= ” -H “Content-Type:application/x-www-form-urlencoded” https://localhost:9443/oauth2/token (来自 https://d