小编典典

允许跨域ajax请求

ajax

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

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

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

感谢您的回复。


阅读 1201

收藏
2020-07-26

共1个答案

小编典典

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

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

  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和其他标头可能会被忽略
  • 同样适用于会议
2020-07-26