silverstripeltd/silverstripe-csp

Silverstripe中CSP头模块。

安装数量: 4,935

依赖项: 1

建议者: 0

安全性: 0

星标: 8

关注者: 18

分支: 3

开放问题: 4

类型:silverstripe-vendormodule

2.1.0 2024-07-18 06:07 UTC

This package is auto-updated.

Last update: 2024-09-18 22:01:52 UTC


README

使用CSP头和SRI标签使您的站点更加安全。

该模块目前不受支持,它将频繁更改并破坏API。

要求

  • SilverStripe ^5 (4.11+ 在之前的标签中可用)

安装

首先安装它,然后配置它。就像乐高一样!

composer require silverstripeltd/silverstripe-csp

文档

首先,您需要创建一个策略,您可能会从基本策略开始,这是一个很好的起点。

这看起来可能像这样

class ContentSecurityPolicy extends Basic
{
    public function configure(): void
    {
        parent::configure();
    }
}

然后您可以从片段开始添加。这些是类似于服务CSP的小段代码。例如YouTube的是

class YouTube implements Fragment
{
    public static function addTo(Policy $policy): void
    {
        $policy
            ->addDirective(Directive::SCRIPT, [
                'www.youtube.com',
                's.ytimg.com',
            ])
            ->addDirective(Directive::FRAME, "*.youtube.com");
    }
}

如果您需要添加新的片段或更新现有的片段,请向仓库提交拉取请求。您要么发现了我们所有使用此模块的项目的一个潜在问题,要么添加了一个其他项目可以从中受益的新服务

在策略中添加片段看起来像这样(在上面的配置函数中)

public function configure(): void
{
    parent::configure();
    $this->addFragments([YouTube::class]);
}

通常您会定义private const FRAGMENTS = []并在其中添加它们,这样在开始时就可以清楚地看到您添加了哪些片段。

要设置报告到URL,我们通常使用一个名为CSP_REPORT_TO的环境变量。有效期也可以使用CSP_REPORT_TO_TTL设置,这告诉浏览器应该记住URL多长时间。

如果需要,您可以在策略的配置函数中调用$this->reportTo()

如果需要,可以将报告发送到多个URL,CSP_REPORT_TO支持CSV,或者可以使用数组使用指令。

要将策略添加到应用策略列表中,您需要在yaml配置中添加一些内容

Silverstripe\CSP\CSPMiddleware:
  policies:
    - 'Silverstripe\CSP\Policies\CMS'
    - 'App\ContentSecurityPolicy'

在上面的配置中,我们将其添加到默认包含的CMS策略之后进行检查。

要使策略仅报告,您可以添加环境变量CSP_REPORT_ONLY='enabled'或在策略中编写代码,例如

public function configure(): void
{
    parent::configure();
    if (Director::isDev()) {
        $this->reportOnly();
    }
}

Google Tag Manager / Adservices 白名单

Google使用本地化区域域名来为访客加载图像跟踪器,这可能会在您的报告工具中累积大量违反报告的记录,如google.com|.co.nz|.com.au等。为了解决此问题,而不是指定Google列出的所有支持域名(见https://www.google.com/supported_domains),可以为GTM片段设置白名单配置,以便在img-src指令中允许所有https: URL,例如

Silverstripe\CSP\Fragments\GoogleTagManager:
  whitelist_google_regional_domains: true

有关https图像的基本覆盖,请参阅ImagesOverHTTPs::class。

SRI

我们还在本模块中支持SRI,您可以通过yaml启用此功能

Silverstripe\CSP\CSPMiddleware:
  sri_enabled: true

这将向通过需求添加的资源添加SRI散列。它不会对通过insertHeadTags添加的资源执行此操作。它也不会为动态创建的文件创建此内容(例如tinymce文件)

我们不会为外部资源添加SRI散列,如果需要,则应在获得外部资源提供的这些散列后自行添加它们(我们不会这样做,因为我们无法控制它们何时以及如何重新计算)

dev/build 将清除 SRI 记录(我们保留这些记录是为了确保我们不会针对每个请求生成它们)。这是通过 DevBuildExtension 添加的。

待办事项列表

  • 添加对内联脚本的哈希处理功能(这将位于 CSPBackend 中)
  • 添加 Google 分析和标签管理器(这将很快完成)
  • 添加单元测试

维护者

问题跟踪器

问题在该存储库的问题部分进行跟踪。在提交问题之前,请先阅读现有的问题以确保您的问题独特。

如果问题看起来像是一个新的错误

  • 创建一个新的问题
  • 描述重现您问题的步骤以及预期的结果。单元测试、截图和屏幕录像在这里可能有所帮助。
  • 尽可能详细地描述您的环境:SilverStripe 版本、浏览器、PHP 版本、操作系统、安装的任何 SilverStripe 模块。

请直接向模块维护者报告安全问题。请不要在问题跟踪器中提交安全问题。

开发和贡献

如果您想为该模块做出贡献,请确保您发起了一个拉取请求,并与模块维护者进行了讨论。

许可

请参阅 许可