wieni/wmcontent_security_policy

使用内容安全策略头部保护您的Drupal网站

安装次数: 1,246

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 6

分支: 1

开放问题: 2

类型:drupal-module

1.1.1 2024-06-26 08:40 UTC

This package is auto-updated.

Last update: 2024-09-26 09:12:45 UTC


README

Latest Stable Version Total Downloads License

使用内容安全策略头部保护您的网站

为什么?

  • 内容安全策略为检测和缓解跨站脚本(XSS)、数据注入和其他漏洞的风险增加了安全层。
  • csp Drupal模块功能更完整,但我们的模块有更简单的界面,且不允许在使用Drupal AJAX的页面上使用内联脚本。

安装

此软件包需要PHP 7.2和Drupal 8或更高版本。可以使用Composer进行安装。

 composer require wieni/wmcontent_security_policy drupal/multivalue_form_element:dev-3199142-drupal-9-compatibility"

补丁

为了使此模块正常工作,需要修补Drupal核心和多值表单元素模块。如果您使用Composer管理安装,请使用cweagans/composer-patches软件包来管理和自动应用补丁。如果不使用Composer,请参阅文档以获取手动应用补丁的说明。

如果下面的补丁不适用于您的软件包版本,您应该访问相关问题并找到更旧或更新的补丁。

// composer.json
{
    "extra": {
        "composer-exit-on-patch-failure": true,
        "patches": {
            "drupal/core": {
              "#2264739: Allow multiple field widgets to not use tabledrag": "https://www.drupal.org/files/issues/2021-01-23/2264739-105.patch"
            },
            "drupal/multivalue_form_element": {
              "#3199172 Handle default values of nested elements": "https://git.drupalcode.org/project/multivalue_form_element/-/merge_requests/2.patch",
              "#3199298 Don't add an empty element when the multivalue element is disabled": "https://git.drupalcode.org/project/multivalue_form_element/-/merge_requests/3.patch",
              "#3200306 Add support for non-orderable multivalue form elements": "https://git.drupalcode.org/project/multivalue_form_element/-/commit/ef4d01ae56a809fc2349d8fec8185ace3b63d15d.patch"
            }
        }
    }
}

它是如何工作的?

管理默认源

通过/admin/config/system/content-security-policy/default-sources上的表单,您可以设置不同策略指令的默认源。这些源对于网站正常运行是必需的。

您添加到那里的源将存储在配置中,因此您可以导出它们并将其添加到版本控制中。

要管理这些源,您需要管理默认内容安全策略源权限。

管理自定义源

通过/admin/config/system/content-security-policy/custom-sources上的表单,您可以向不同的策略指令添加自定义源。

您添加到此处的源将存储在数据库中,并且不会与配置一起导出。这对于允许内容编辑器添加某些网站内容所需的源非常有用。

要管理这些源,您需要管理自定义内容安全策略源权限。

添加脚本哈希

如果您想包含某些内联脚本(例如Google Analytics片段)而不允许script-src: 'unsafe-inline',可以将这些脚本的哈希值添加到您的script-src策略中(更多信息这里)。

您可以在Twig中使用addCspHash函数添加脚本哈希。

{{ addCspHash("'sha256-n4MwUTyKKCBlMIFkvcS3dkmlRFEcqSm/V0IOhZelzA0='") }}

您可以在代码中使用wmcontent_security_policy.content_security_policy:addScriptHash添加脚本哈希。

\Drupal::service('wmcontent_security_policy.content_security_policy')
    ->addScriptHash("'sha256-n4MwUTyKKCBlMIFkvcS3dkmlRFEcqSm/V0IOhZelzA0='");

最后,也可以通过管理表单添加脚本哈希,就像添加任何其他源一样。

事件

提供一个事件,允许您在构建头部之前动态添加源。

<?php

use Drupal\wmcontent_security_policy\ContentSecurityPolicyEvents;
use Drupal\wmcontent_security_policy\Event\SourcesAlterEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ContentSecurityPolicySourcesSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        $events[ContentSecurityPolicyEvents::SOURCES_ALTER][] = ['onSourcesAlter'];

        return $events;
    }

    public function onSourcesAlter(SourcesAlterEvent $event): void
    {
        if (!empty($_ENV['S3_CNAME'])) {
            $event->addSource('script-src', $_ENV['S3_CNAME']);
            $event->addSource('connect-src', $_ENV['S3_CNAME']);
            $event->addSource('style-src', $_ENV['S3_CNAME']);
        }
    }
}

变更日志

此项目的所有显著更改都将记录在CHANGELOG文件中。

安全

如果您发现任何安全相关的问题,请通过security@wieni.be发送电子邮件,而不是使用问题跟踪器。

许可证

遵循MIT许可协议分发。更多信息请参阅LICENSE文件。