CORS(跨域资源共享)来源验证失败
Posted
技术标签:
【中文标题】CORS(跨域资源共享)来源验证失败【英文标题】:CORS (Cross-Origin Resource Sharing) origin validation failure 【发布时间】:2021-11-24 09:42:48 【问题描述】:最近我为客户做了一个网站。收到后,客户端将站点发送给 acunetix 安全检查,结果返回此警报。
----acunetix 警报--- `访问控制允许来源:https://www.example.com 访问控制允许凭据:true
接受任何来源(任意 Origin 标头值反映在 Access-Control- Allow-Origin 响应标头)。对于 WordPress /wp-json/ 端点,这可能是
预期的行为,需要人工审核。如需更多信息,请 请参阅下面“参考”部分中链接的 WordPress REST API 手册。` --- acunetix 警报结束 ---
我终于找到了它的位置——在rest-api.php中
function rest_send_cors_headers( $value )
$origin = get_http_origin();
if ( $origin )
// Requests from file:// and data: URLs send "Origin: null".
if ( 'null' !== $origin )
$origin = esc_url_raw( $origin );
header( 'Access-Control-Allow-Origin: ' . $origin );
header( 'Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, PATCH, DELETE' );
header( 'Access-Control-Allow-Credentials: true' );
header( 'Vary: Origin', false );
elseif ( ! headers_sent() && 'GET' === $_SERVER['REQUEST_METHOD'] && ! is_user_logged_in() )
header( 'Vary: Origin', false );
return $value;
谁能告诉我在这种情况下我该怎么办?我该如何解决,或者我应该让它成为 wordpress 的做法。 非常感谢您。
【问题讨论】:
【参考方案1】:见
function cors()
if (array_key_exists('HTTP_ORIGIN', $_SERVER))
$origin = $_SERVER['HTTP_ORIGIN'];
else if (array_key_exists('HTTP_REFERER', $_SERVER))
$origin = $_SERVER['HTTP_REFERER'];
else
$origin = $_SERVER['REMOTE_ADDR'];
$allowed_domains = array(
'http://localhost:4200',
'https://x.ir',
'https://www.x.ir',
);
if (in_array($origin, $allowed_domains))
header('Access-Control-Allow-Origin: ' . $origin);
header("Access-Control-Allow-Headers: Origin, X-API-KEY, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Access-Control-Allow-Headers, Authorization, observe, enctype, Content-Length, X-Csrf-Token");
header("Access-Control-Allow-Methods: GET, PUT, POST, DELETE, PATCH, OPTIONS");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Max-Age: 3600");
header('content-type: application/json; charset=utf-8');
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS")
header("HTTP/1.1 200 OK CORS");
die();
【讨论】:
感谢您的回复。我应该用这个替换我的代码吗? 因为当我删除之前在这里发送的代码时,它会显示此错误 REST API 是 WordPress 和其他应用程序与服务器通信的一种方式。一个例子是块编辑器屏幕,它依靠它来显示和保存您的帖子和页面。 REST API 调用给出了以下意外结果:(500) 致命错误:未捕获类型错误:call_user_func_array():参数 #1 ($callback) 必须是有效回调,函数“rest_send_cors_headers " 在 C:\xampp\htdocs\s3\wp-includes\class-wp-hook.php:305 中找不到或无效的函数名 堆栈跟踪:#0 将其用作全局过滤器以上是关于CORS(跨域资源共享)来源验证失败的主要内容,如果未能解决你的问题,请参考以下文章