Новости

AMP WordPress и Content Security Policy (CSP)

В двух словах о CSP

CSP (Content Security Policy) — стандарт защиты сайтов от атак с внедрением контента, например XSS — межсайтового скриптинга. CSP описывает безопасные источники загрузки и блокирует ресурсы, которые не входят в «белый список»

Что решает Nonce для CSP

Зачем использовать атрибут Nonce? Использование атрибута nonce в тегах скриптов значительно повышает безопасность вашего веб-сайта. Nonce – это случайно сгенерированное значение, которое позволяет запускать определенные скрипты, блокируя потенциально опасные. Вот почему это важно:

  • Повышает веб-безопасность: позволяя использовать только скрипты с допустимым nonce, вы можете предотвратить несанкционированное выполнение кода
  • Уменьшает количество ошибок в консоли браузера: Недопустимые теги скриптов могут привести к ошибкам в консоли, которые влияют на производительность сайта и удобство работы с пользователем

Если для всех скриптов темы вы можете добавить обработку подмены <script на <script nonce=, то для AMP необходим другой подход

Решите потенциальные проблемы

Создайте плагин ampnonce и разместите там следующий код (где замените foo на свое значение nonce):

<?php
/**
 * Plugin Name: Nonce for AMP WordPress
 * Plugin URI: https://milordk.ru
 * Description: Nonce in AMP WordPress (refact https://github.com/rtCamp/amp-generic-compat)
 * Author: Jettochkin
 * Author URI: https://milordk.ru
 * Text Domain: nonceamp
 * Domain Path: /languages
 * Version: 1.0.0
 *
 * @package NONCEAMP
 */

namespace AMP_CSP_Scripts;
use AmpProject\Optimizer\Transformer;
use AmpProject\Dom\Document;
use AmpProject\Optimizer\ErrorCollection;
use DOMElement;

class ScriptNonceTransformer implements Transformer {
	public function transform( Document $document, ErrorCollection $errors ) {
		$scripts = $document->xpath->query( '//script[ not( @type ) or @type = "module" ]' );
		foreach ( $scripts as $script ) {
			/** @type DOMElement $script */
			$script->setAttribute( 'nonce', 'foo' );
		}
	}
}
add_filter(
	'amp_optimizer_config',
	static function ( $config ) {
		$config['transformers'][] = ScriptNonceTransformer::class;
		return $config;
	}
);

Используя этот плагин, вы обеспечиваете плавную интеграцию атрибутов nonce в свои AMP-скрипты, поддерживая соответствие стандартам безопасности и оптимизируя производительность

To top