允许跨域 ajax 请求

2022-08-30 12:29:19

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

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

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

感谢您的回复。


答案 1

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

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

  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).')';

?>
  1. 有人通过过于频繁地打电话来滥用您的服务。为此的解决方案是捕获IP地址,并在从IP地址收到太多呼叫时拒绝。不是万无一失,但这是一个开始。

其他需要牢记的因素:

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

答案 2

就像zerkms说的,如果他们只是“去”你的php页面,他们将能够看到它所回响的任何东西。如果可能的话(不确定),它还将允许不需要的人即使在本地主机上创建自己的表单,并通过AJAX提交它们以获得他们想要的响应。如果这对你来说没关系,并且信息是模棱两可/无害的......然后我想这将是“安全的”。获取/传输敏感信息不是一种好的方法


推荐