damoclark/simple-cors

用于发送 CORS 头的简单库

v1.0.1 2017-10-18 04:12 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:07:59 UTC


README

概述

这是一个提供跨源资源共享(CORS)验证的简单库。该库不受任何特定框架的约束,只有一个依赖项。

CORS 配置通过一个 ini 文件定义,其路径可以从可配置的 web 服务器环境变量中确定。

安装

使用 composer 需求 damoclark/simple-cors

简单用法

准备一个包含您的 CORS 安全配置的 ini 文件

; https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers
; Access-Control-Allow-Headers: <header-name>, <header-name>, ...
allowedHeaders[] = 'X-HEADER'

; https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods
; Access-Control-Allow-Methods: <method>, <method>, ...
allowedMethods = 'GET,POST'

; https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
; Access-Control-Allow-Origin: *
; Access-Control-Allow-Origin: <origin>
allowedOrigins = '*'

; https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers
; Access-Control-Expose-Headers: <header-name>, <header-name>, ...
; exposedHeaders[] = ...

; Access-Control-Max-Age: <delta-seconds>
; maxAge = 86400 <- 1 day
maxAge = 86400

; https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials
; Access-Control-Allow-Credentials: true
supportsCredentials = true

通过您的 web 服务器配置设置环境变量 CORSCONF

<VirtualHost *>
	...
	SetEnv CORSCONF "/path/to/cors.ini"
	...
</VirtualHost>

将以下行添加到您的脚本开头(在需要 composer 自动加载器之后)

// Respond with cors headers (where path to config ini file is stored in `CORSCONF` environment variable)
$cors = new \damoclark\SimpleCors\SimpleCors() ;


$cors->handle() or exit() ;

handle() 方法将返回 true,如果您的脚本应该继续执行。以下情况包括:

  • 这是一个有效的 CORS 请求
  • 这不是一个 CORS 请求

该方法将在以下情况下返回 false:

  • 当方法不被允许时
  • 当源不被允许时
  • 当请求的头部不被允许时
  • 当它是一个预检请求(OPTIONS 请求方法)时

在最后一种情况(预检)中,handle() 方法已经向客户端发送了响应头部,因此您的脚本仍然可以安全地在此点终止,如示例所示

如果您不希望脚本在不是 CORS 请求的情况下继续执行,则可以使用以下模式

// Respond with cors headers (where path to config ini file is stored in `CORSCONF` environment variable)
$cors = new \damoclark\SimpleCors\SimpleCors() ;

$cors->isCorsRequest() or exit() ;

$cors->handle() or exit() ;

贡献

欢迎通过拉取请求进行贡献。

许可证

版权 (c) 2017 Damien Clark,Damo's World

许可协议为 LGPLv3
LGPLv3

本软件由版权所有者和贡献者提供,“按原样”提供,并且不提供任何明示或暗示的保证,包括但不限于适销性保证和针对特定目的的适用性保证。在任何情况下,Damien Clark 对任何直接、间接、偶然、特殊、示范性或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)不承担责任,无论此类损害是基于合同、严格责任还是侵权(包括疏忽或其他),即使已告知此类损害的可能性。