wieni / wmcontent_security_policy
使用内容安全策略头部保护您的Drupal网站
Requires
- php: ^7.2 || ^8.0
- drupal/core: ^9.3 || ^10.0
- drupal/multivalue_form_element: ^1 || ^1@beta
Requires (Dev)
- ergebnis/composer-normalize: ^2.0
- wieni/wmcodestyle: ^1.1
This package is auto-updated.
Last update: 2024-09-26 09:12:45 UTC
README
使用内容安全策略头部保护您的网站
为什么?
- 内容安全策略为检测和缓解跨站脚本(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文件。