pdphilip/cf-request

Cloudflare Laravel 请求

赞助包维护!
pdphilip

v1.0.2 2024-09-19 13:04 UTC

This package is auto-updated.

Last update: 2024-09-19 13:05:46 UTC


README

Cloudflare Laravel 请求

Cloudflare Laravel Request

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status

Cloudflare Laravel 请求从 Laravel 继承请求对象,并解析 Cloudflare 的特定头部,以提供有关请求的更多信息,包括

  • CfRequest::ip() - 原始客户端 IP(在它通过任何代理之前)
  • CfRequest::country() - 原始国家
  • CfRequest::timezone() - 原始时区
  • CfRequest::city() - 原始城市
  • CfRequest::region() - 原始地区
  • CfRequest::postalCode() - 原始邮政编码
  • CfRequest::lat() - 原始纬度
  • CfRequest::lon() - 原始经度
  • CfRequest::isBot() - 如果是机器人
  • CfRequest::threatScore() - Cloudflare 的威胁分数

用户代理也被解析以提供有关设备的更多信息,包括

  • CfRequest::deviceType() - 设备类型(手机、平板电脑、桌面、电视等)
  • CfRequest::deviceBrand() - 设备品牌
  • CfRequest::deviceModel() - 设备型号
  • CfRequest::os() - 设备操作系统
  • CfRequest::osVersion() - 设备操作系统版本
  • CfRequest::browser() - 设备浏览器
  • CfRequest::browserVersion() - 设备浏览器版本

使用此包,您可以

  • 在控制器方法中将 Request $request 替换为 CfRequest $request 以访问附加方法。
  • 在您的应用程序的任何地方调用 CfRequest 门面以访问这些信息。

CF 请求实战:测试您的连接

亮点

借助 Cloudflare 的安全功能

public function register(CfRequest $request)
{
    if ($request->isBot()) {
        abort(403, 'Naughty bots');
    }
    if ($request->threatScore() > 50) {
        abort(403, 'Thanks but no thanks');
    }
    $attributes = $request->validate([
        'first_name' => 'required|string',
        'last_name' => 'required|string',
        //... etc
    ]);
   //... etc
}

根据原始位置设置时区

date_default_timezone_set(CfRequest::timezone());
// Now carbon dates will be parsed for the user's timezone

根据用户的国家/地区应用逻辑

public function welcome()
{
   if (CfRequest::country() === 'US') {
         return view('welcome_us');
   }
   return view('welcome');
}

根据设备类型应用逻辑

public function welcome()
{
    $loadVideo = true;
    if (CfRequest::deviceType() === 'mobile') {
        $loadVideo = false;
    }
    // etc
}

要求

  • Laravel 10+
  • Cloudflare 作为代理(尽管它也可以在没有它的情况下工作,并且没有 CF 特定头部的数据)

安装

通过 composer 添加包

composer require pdphilip/cf-request

然后安装

php artisan cf-request:install

Cloudflare 设置

选项 1:通过 Cloudflare API

步骤 1:复制区域 ID

  • 转到您的 Cloudflare 控制台
  • 点击您要配置的域名
  • 复制区域 ID
  • 保存到 ENV 作为 CF_API_ZONE_ID
Cloudflare Laravel Request - zoneid

步骤 2:创建 API 令牌

令牌配置

  • {输入令牌名称}
  • 权限
    • 账户:账户规则集:编辑
    • 区域:转换规则:编辑
  • 账户资源
    • 包含:所有账户
  • 区域资源
    • 包含:所有区域
Cloudflare Laravel Request - token perms
  • 创建令牌并保存到 ENV 作为 CF_API_TOKEN

运行 artisan 命令

php artisan cf-request:headers
Cloudflare Laravel Request - artisan
选项 2:在 Cloudflare 上手动操作

转到 "修改请求头部"

  • 转到您的 Cloudflare 控制台
  • 点击您要配置的域名
  • 点击 "规则 -> 转换规则" 菜单
  • 选择 "修改请求头部" 选项卡
  • 点击 "创建规则"

创建规则

  • 名称:"Laravel 头部"
  • 选择 "所有传入请求"
  • 设置以下头部

设置为动态
X-AGENT
http.user_agent

设置为动态
X-IP
ip.src

设置为动态
X-COUNTRY
ip.src.country

设置为动态
X-CONTINENT
ip.src.continent

设置为动态
X-CITY
ip.src.city

设置为动态
X-POSTAL-CODE
ip.src.postal_code

设置为动态
X-REGION
ip.src.region

设置为动态
X-TIMEZONE
ip.src.timezone.name

设置为动态
X-LAT
ip.src.lat

设置为动态
X-LON
ip.src.lon

设置为动态
X-REFERER
http.referer

设置为动态
X-IS-BOT
cf.client.bot

设置为动态
X-THREAT-SCORE
cf.threat_score

使用说明

所有标准的Laravel请求方法都可用,以下是一些附加方法

CfRequest::country()

CfRequest::city()

CfRequest::region()

CfRequest::postalCode()

CfRequest::lat()

CfRequest::lon()

CfRequest::timezone()

CfRequest::isBot()

CfRequest::threatScore()

CfRequest::isMobile()

CfRequest::isTablet()

CfRequest::isDesktop()

CfRequest::isTv()

CfRequest::deviceType()

CfRequest::deviceBrand()

CfRequest::deviceModel()

CfRequest::os()

CfRequest::osVersion()

CfRequest::osFamily()

CfRequest::browser()

CfRequest::browserVersion()

CfRequest::browserName()

CfRequest::browserFamily()

CfRequest::referer()

CfRequest::refererDomain()

您可以使用CfRequest外观或将CfRequest $request类注入到控制器方法中。

测试头部信息

  • 此包包含一个测试路由,它将显示从Cloudflare解析出的头部信息。
  • 您可以通过访问应用程序中的/cf-request/status来访问此路由。
  • 您可以在配置文件中禁用此功能,或将环境变量CF_ALLOW_STATUS_VIEW设置为false

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

致谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件