当前位置: 首页 > 知识库问答 >
问题:

允许跨域ajax请求

杜昆琦
2023-03-14

在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展<我只是在我的脚本顶部添加了这两行,让他们完成这项任务:

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

现在我的问题是:这里有我错过的任何安全考虑吗?这个简单的解决方案会产生严重的问题吗?
如果是,更好的解决方案是什么?

感谢您的回复。

共有3个答案

狄易安
2023-03-14

这对我来说是完美的。

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Allow: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if($method == "OPTIONS") {
    die();
}
范安歌
2023-03-14

正如zerkms所说,如果他们只是“转到”你的php页面,他们将能够看到它的任何回声。如果可能的话(不确定),它还将允许不想要的人甚至在本地主机上创建自己的表单,并通过AJAX提交表单以获得他们想要的响应。。如果你同意,并且信息不明确/无害。。。那么我想它是“安全的”。获取/传输敏感信息的方法不合适

艾奕
2023-03-14

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

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

  1. 您可能遇到的问题是用户将信息接收到他们的脚本中。根据浏览器的不同(甚至在同一浏览器的不同版本之间),有不同的安全规则阻止他们获取信息。一个常见的解决方案是以“JSONP”的形式提供信息,这是将您的返回值包装为可以由客户端执行的函数调用。这是一个快速示例(取自http://www.geekality.net/2010/06/27/php-how-to-easily-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).')';

?>

应铭记的其他因素:

  • 脚本设置的Cookie和其他标题可能会被忽略
 类似资料:
  • 问题内容: 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展。 我在脚本顶部仅添加了以下两行,以使它们能够做到: 现在我的问题是:这里是否遗漏了任何安全方面的考虑?这个简单的解决方案会带来严重的问题吗? 如果是这样,什么是更好的解决方案? 感谢您的回复。 问题答案: 如上所述,任何人都可以随时向您的页面发送请求:因此,您需要考虑的主

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

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

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

  • 问题内容: 如何使用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