asbiin/laravel-sentry-tunnel

提供了一个端点,用于使用 Sentry SDK 的 `tunnel` 参数

2.2.0 2024-03-18 17:59 UTC

This package is auto-updated.

Last update: 2024-08-31 00:49:15 UTC


README

本包提供了一个 URL,用于与 Sentry SDK 的 tunnel 选项 一起使用。

Latest Version Downloads Workflow Status Quality Gate Coverage Status

安装

composer require asbiin/laravel-sentry-tunnel

配置

你可以选择发布配置文件

php artisan vendor:publish --provider=SentryTunnel\\Provider

允许的主机和项目

项目将使用 SENTRY_LARAVEL_DSN 值来设置有效的 Sentry 主机和项目,用于隧道传输流量。

你可以通过在 .env 文件中设置 SENTRY_TUNNEL_ALLOWED_HOSTS 值来定义允许的主机,并通过设置 SENTRY_TUNNEL_ALLOWED_PROJECTS 值来定义允许的项目。

SENTRY_TUNNEL_ALLOWED_HOSTS=my.host.com
SENTRY_TUNNEL_ALLOWED_PROJECTS=1234,456,78

安全

这本质上创建了一个指向 SENTRY_TUNNEL_ALLOWED_HOSTS 的反向代理。由于 Sentry DSN 不会被保密,这允许每个人都可以向这些主机发送看似来自你的服务器的消息。

因此,隧道 URL 的默认中间件列表包括 webauth(这样只有认证用户才能使用端点)。

你可以通过设置 config/sentry-tunnel.php 文件中的 sentry-tunnel.middleware 值来更改隧道端点的中间件列表。

CsrfToken

由于你目前无法在 Sentry 的 transportOptions 中传递动态的 X-XSRF-TOKEN 标头,你可以实现自己的传输或者将隧道 URL 放入 VerifyCsrfToken 中间件的排除列表中。

  • 将 URL 添加到 VerifyCsrfToken 中间件的 except 数组中。
->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(except: [
        '/sentry/tunnel',
    ]);
})
  • 或者实现自己的传输

示例:

const myTransport = (options) => {
  const makeRequest = async (request) => {
    const requestOptions = {
      data: request.body,
      url: options.url,
      method: 'POST',
      referrerPolicy: 'origin',
      headers: options.headers,
      ...options.fetchOptions,
    };
    return axios(requestOptions).then((response) => ({
      statusCode: response.status,
      headers: response.headers,
    }));
  };
  return createTransport({ bufferSize: options.bufferSize }, makeRequest);
};

Sentry.init({
    // ...
    transport: myTransport,
});

URL

如果需要,你可以更改隧道的 URL。默认值为 /sentry/tunnel

SENTRY_TUNNEL_URL="/super/secret/tunnel"

使用方法

参考 Sentry 文档

引用

本包是从 naugrim/laravel-sentry-tunnel 分支出来的,做了一些微小的修改。

许可

作者: Alexis Saettler

版权 © 2024。

在 MIT 许可证下发布。 查看许可