Products
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类的工作流程如下:
构造函数:在构造函数中定义允许访问的域名列表。
allowAccess():这是主方法,用于检测跨域请求并设置CORS头。
getOrigin():获取HTTP请求中的Origin头,这个头表示了请求来源的域名。
isAllowedDomain($origin):检查请求的域名是否在允许的域名列表中。
setCorsHeaders($allowedOrigin):如果请求的域名被允许,设置CORS相关的HTTP头。包括:
Access-Control-Allow-Origin:指定允许访问的域名。
Access-Control-Allow-Methods:指定允许的HTTP方法。
Access-Control-Allow-Headers:指定允许的HTTP请求头。
Access-Control-Allow-Credentials:指示浏览器可以发送凭证信息(如cookies)。
denyAccess():如果请求的域名不被允许,返回HTTP 403 Forbidden响应。
OPTIONS请求处理:在实际请求之前,浏览器可能会发送一个OPTIONS预请求来询问服务器是否允许跨域请求。在示例代码中,如果检测到OPTIONS请求,将调用allowAccess()方法并退出,以避免执行后续的业务逻辑。
这个类提供了一个基本的跨域访问控制机制。在实际应用中,你可能需要根据具体需求调整允许的HTTP方法、请求头等。此外,出于安全考虑,应该谨慎选择允许跨域访问的域名,并确保不会引入安全风险。
Demand feedback