其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

php跨域检测类允许部分域名访问的示例详解

GG网络技术分享 2025-03-18 16:17 0


在PHP中实现跨域资源共享(CORS)的控制,可以通过设置HTTP头来允许特定的域名进行资源访问。以下是一个简单的PHP类示例,用于检测跨域请求并允许特定的域名列表进行访问:

<?php

class CorsHandler {

private $allowedDomains = [\'https://example.com\', \'https://sub.example.com\'];

public function allowAccess() {

$requestOrigin = $this->getOrigin();

if ($this->isAllowedDomain($requestOrigin)) {

$this->setCorsHeaders($requestOrigin);

} else {

$this->denyAccess();

}

}

private function getOrigin() {

return isset($_SERVER[\'HTTP_ORIGIN\']) ? $_SERVER[\'HTTP_ORIGIN\'] : \'\';

}

private function isAllowedDomain($origin) {

return in_array($origin, $this->allowedDomains, true);

}

private function setCorsHeaders($allowedOrigin) {

header(\'Access-Control-Allow-Origin: \' . $allowedOrigin);

header(\'Access-Control-Allow-Methods: GET, POST, OPTIONS\');

header(\'Access-Control-Allow-Headers: Content-Type, Authorization\');

header(\'Access-Control-Allow-Credentials: true\');

}

private function denyAccess() {

header(\'HTTP/1.1 403 Forbidden\');

exit;

}

}

// 使用示例

$corsHandler = new CorsHandler();

// 检查OPTIONS请求,这是预请求的一部分,用于确认实际请求是否安全

if ($_SERVER[\'REQUEST_METHOD\'] === \'OPTIONS\') {

$corsHandler->allowAccess();

exit;

}

// 正常处理请求

$corsHandler->allowAccess();

// ... 处理业务逻辑

?>

这个CorsHandler类的工作流程如下:

  1. 构造函数:在构造函数中定义允许访问的域名列表。

  2. allowAccess():这是主方法,用于检测跨域请求并设置CORS头。

  3. getOrigin():获取HTTP请求中的Origin头,这个头表示了请求来源的域名。

  4. isAllowedDomain($origin):检查请求的域名是否在允许的域名列表中。

  5. setCorsHeaders($allowedOrigin):如果请求的域名被允许,设置CORS相关的HTTP头。包括:

    • Access-Control-Allow-Origin:指定允许访问的域名。

    • Access-Control-Allow-Methods:指定允许的HTTP方法。

    • Access-Control-Allow-Headers:指定允许的HTTP请求头。

    • Access-Control-Allow-Credentials:指示浏览器可以发送凭证信息(如cookies)。

  6. denyAccess():如果请求的域名不被允许,返回HTTP 403 Forbidden响应。

  7. OPTIONS请求处理:在实际请求之前,浏览器可能会发送一个OPTIONS预请求来询问服务器是否允许跨域请求。在示例代码中,如果检测到OPTIONS请求,将调用allowAccess()方法并退出,以避免执行后续的业务逻辑。

这个类提供了一个基本的跨域访问控制机制。在实际应用中,你可能需要根据具体需求调整允许的HTTP方法、请求头等。此外,出于安全考虑,应该谨慎选择允许跨域访问的域名,并确保不会引入安全风险。

标签: 示例 域名

提交需求或反馈

Demand feedback