altis/browser-security

WordPress/Altis 浏览器安全工具

安装次数: 142,425

依赖项: 2

建议者: 0

安全: 0

星级: 9

关注者: 22

分支: 3

开放问题: 8

类型:wordpress-plugin

2.1.0 2023-05-08 13:18 UTC

This package is auto-updated.

Last update: 2024-08-24 14:58:07 UTC


README

提高您WordPress站点的浏览器安全性。

专为Altis,企业WordPress数字体验平台构建,并包含在内。

安装

您可以使用此插件作为子模块或作为Composer依赖项。

# For submodule usage:
git submodule add https://github.com/humanmade/altis-browser-security.git wp-content/plugins/altis-browser-security

# For Composer usage:
composer require altis/browser-security

配置

如果您使用的是Altis DXP的一部分,配置将通过配置框架处理。请参阅Altis安全模块文档

作为独立插件,您可以使用以下常量来更改此模块的行为

  • ABS_AUTOMATIC_INTEGRITY (bool): 真值启用自动生成完整性哈希,假值禁用。 (默认为真。)
  • ABS_NOSNIFF_HEADER (bool): 真值发送 X-Content-Type-Options: nosniff,假值禁用。 (默认为真。)
  • ABS_FRAME_OPTIONS_HEADER (bool): 真值发送 X-Frame-Options: SAMEORIGIN,假值禁用。 (默认为真。)
  • ABS_XSS_PROTECTION_HEADER (bool): 真值发送 X-XSS-Protection: 1; mode=block,假值禁用。 (默认为真。)

功能

子资源完整性

此插件在可能的情况下自动添加子资源完整性哈希。这些哈希将为同一服务器上的任何文件生成;即任何插件或主题资源。

这些哈希将自动缓存在对象缓存中,与脚本或样式的文件名和版本相关联。

对于外部资源,您可以手动设置完整性哈希。在排队(或注册)您的资源后,使用set_hash_for_script()set_hash_for_style()辅助函数。

// Setting hashes for scripts.
use Altis\Security\Browser;
wp_enqueue_script( 'my-handle', 'https://...' );
Browser\set_hash_for_script( 'my-handle', 'sha384-...' );

// Setting hashes for styles.
use Altis\Security\Browser;
wp_enqueue_style( 'my-handle', 'https://...' );
Browser\set_hash_for_style( 'my-handle', 'sha384-...' );

内容安全策略

此插件可以自动收集并发送内容安全策略

默认情况下,不发送任何策略。 CSP策略通常针对特定网站,因此没有对您可能需要的假设。

altis.security.browser.content_security_policies添加过滤器以设置策略。此过滤器接收一个数组,其中的键是策略指令名称。每个项目可以是字符串或指令值字符串的列表。

add_filter( 'altis.security.browser.content_security_policies', function ( array $policies ) : array {
	// Policies can be set as strings.
	$policies['object-src'] = 'none';
	$policies['base-uri'] = 'self';

	// Policies can also be set as arrays.
	$policies['font-src'] = [
		'https://fonts.gstatic.com',
		'https://cdnjs.cloudflare.com',
	];

	// Special directives (such as `unsafe-inline`) are handled for you.
	$policies['script-src'] = [
		'https:',
		'unsafe-inline',
	];

	return $policies;
} );

特殊指令('self''unsafe-inline''unsafe-eval''none''strict-dynamic')无需双引号。

如果需要,您还可以修改个别指令。

// You can filter specific keys via the filter name.
add_filter( 'altis.security.browser.filter_policy_value.font-src', function ( array $values ) : array {
	$values[] = 'https://fonts.gstatic.com';
	return $values;
} );

// A filter is also available with the directive name in a parameter.
add_filter( 'altis.security.browser.filter_policy_value', function ( array $values, string $name ) : array {
	if ( $name === 'font-src' ) {
		$values[] = 'https://cdnjs.cloudflare.com';
	}

	return $values;
} );

要构建内容安全策略,我们建议使用Firefox的Laboratory CSP工具包扩展CSP评估器工具

仅报告策略

要发送内容安全策略-仅报告头,请使用与普通CSP策略相同的上述过程,但使用替代过滤器altis.security.browser.report_only_content_security_policies

必须使用外部服务来处理来自“仅报告”策略的报告。外部服务将为您提供用于处理报告的URL,您可以通过添加一个具有适当URL的report-uri指令来使用它。

例如,您可以通过筛选策略数组将报告指令添加到您的“仅报告”策略中。

add_filter( 'altis.security.browser.report_only_content_security_policies', function ( array $policies ) : array {
	$policies['report-uri'] = 'https://example.uriports.com/reports';
	return $policies;
} );

您还可以使用过滤器以相同的方式修改单个指令,用于在报告-only策略中,使用以下过滤器:

  • altis.security.browser.filter_report_only_policy_value.{指令名称}
  • altis.security.browser.filter_report_only_policy_value

可以同时使用常规和仅报告策略。

安全头部

此插件默认自动添加各种安全头部。这些遵循Web安全最佳实践,旨在提供合理、安全的基本设置。

在某些情况下,您可能需要根据您站点的使用情况调整或禁用这些头部。

Strict-Transport-Security

使用Strict-Transport-Security头部(有时称为HSTS)用于在加载站点时强制执行HTTPS(TLS/SSL)连接,并可用于增强站点的安全性。

默认情况下,如果您的站点通过HTTPS提供服务,Altis会添加一个值为max-age=86400(一天)的Strict-Transport-Security头部。如果您想覆盖此值(例如,对于更长的持续时间或指定includeSubdomains),可以定义ABS_HSTS常量。

define( 'ABS_HSTS', 'max-age=31536000; includeSubDomains' );

要完全禁用自动行为,请将常量设置为false

define( 'ABS_HSTS', false );

X-Content-Type-Options

默认情况下,Altis会添加一个值为nosniffX-Content-Type-Options头部。这防止浏览器尝试根据内容猜测内容类型,并强制它们遵循Content-Type头部中设置的类型。

这通常应该始终发送,并且您的内容类型应该始终明确设置。如果需要禁用它,请设置ABS_NOSNIFF_HEADER常量。

define( 'ABS_NOSNIFF_HEADER', false );

X-Frame-Options

默认情况下,Altis会添加一个值为sameoriginX-Frame-Options头部。这防止您的站点被iframe到另一个站点,这可以防止点击劫持攻击

这通常应该始终发送,但在某些情况下,您可能希望允许特定站点iframe您的站点或允许任何站点。要禁用自动头部,请设置ABS_FRAME_OPTIONS_HEADER常量。

define( 'ABS_FRAME_OPTIONS_HEADER', false );

然后您可以根据需要发送自己的头部。我们建议挂钩到template_redirect钩子来发送这些头部。

X-XSS-Protection

默认情况下,Altis会添加一个值为1; mode=blockX-XSS-Protection头部。这防止浏览器在检测到跨站脚本(XSS)攻击时加载。

这通常应该始终发送。如果需要禁用它,请设置ABS_XSS_PROTECTION_HEADER头部。

define( 'ABS_XSS_PROTECTION_HEADER', false );

限制CORS源

默认情况下,WordPress将允许任何源发起的REST API请求。此插件添加了一个新的过滤器altis.security.browser.rest_allow_origin来限制CORS源

要完全禁止外部请求,请将过滤器设置为false

add_filter( 'altis.security.browser.rest_allow_origin', '__return_false' );

仅允许特定源

add_filter( 'altis.security.browser.rest_allow_origin', function ( $allow, $origin ) {

	$allowed_origins = [
		'https://www.example.com',
	];

	if ( in_array( $origin, $allowed_origins, true ) ) {
		return true;
	}

    return false;
}, 10, 2 );

禁止所有本地域

add_filter( 'altis.security.browser.rest_allow_origin', function ( $allow, $origin ) {
    if ( false !== strpos( $origin, '.local' ) ) {
        return false;
    }

    return $allow;
}, 10, 2 );

许可证

Altis Browser Security根据GPLv2或更高版本授权。版权所有2019年Human Made及其贡献者。