Content Security Policy 

The extension declares the Content Security Policy sources its editing surface needs, in Configuration/ContentSecurityPolicies.php. TYPO3 collects that file automatically from every installed package — there is nothing to register, enable or copy.

Everything it asks for is the site's own origin. The extension loads no script, no stylesheet, no font and no image from anywhere else, and it requests no source expression that weakens a policy.

Whether the policy applies at all 

Frontend Content Security Policy is switched off by default in TYPO3 v13 and v14. On an installation that has not enabled it, this file is collected and has no effect, and the editing surface behaves as if it were not there.

There are two independent ways a site turns it on, and neither is implied by the other.

config/system/additional.php
// Send the policy as an enforcing header:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['security.frontend.enforceContentSecurityPolicy'] = true;

// Or only observe it, and collect violation reports:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['features']['security.frontend.reportContentSecurityPolicy'] = true;
Copied!
config/sites/<identifier>/csp.yaml
enforce: true
Copied!

The csp.yaml route needs no feature flag. A site can therefore have the policy active while both flags are false, which is why "the feature is off" is not a safe assumption when debugging a blocked resource.

What the extension declares 

Four directives, each granting 'self' and nothing else:

Directive Needed for
script-src 'self' The editing module, an ES module resolved through the TYPO3 import map. No inline script is emitted by this extension.
style-src 'self' The one <link rel="stylesheet"> the plugin adds. The component's own styles never reach this directive — see below.
connect-src 'self' The fetch() calls to the editing endpoints, at relative URLs built on the server.
img-src 'self' Stored profile images, served by the file abstraction layer from this origin.

All four use the Extend mutation mode, which inherits whatever the ancestor directive already permits before appending.

What they cost on a default installation 

Close to nothing, and this was measured rather than argued: the same page was rendered with the file and without it, and the emitted header differed by one directive.

All four descend from default-src. With the default-src 'self' that TYPO3 itself declares for the frontend, each of them resolves to exactly 'self' — and TYPO3 then removes a directive whose source set is identical to its ancestor's. Three of the four disappear that way. The fourth, style-src, survives only because the reporting token 'report-sample' is appended to declared directives and not to default-src, so the two sets differ by a token that grants nothing.

What is deliberately not requested 

Each of these was checked against the shipped assets. None is omitted by oversight, and none should be added without establishing that it is needed.

Not requested Why it is not needed
style-src 'unsafe-inline' The component installs its styles through adoptedStyleSheets, which produces no <style> element at all.
img-src data: / blob: There is no client side image preview. The chosen file goes straight into a FormData, and what is shown afterwards is the stored file.
form-action There is no <form>. Every control is a <button type="button"> and every write is a fetch().
font-src The surface ships no font and uses the page's typeface. See The typeface is inherited on purpose.
script-src 'unsafe-eval', worker-src, frame-src, base-uri, object-src Nothing in the shipped assets uses any of them.

No nonce is requested either. The single inline script on the page is the import map, which is TYPO3's own and which TYPO3 covers with a hash of its content.

Changing or removing it 

Dropping only this extension 

Name the composer package in the site's csp.yaml. Everything other packages declare is kept:

config/sites/<identifier>/csp.yaml
enforce:
  packages:
    '*': true
    sbuerk/modern-extbase-frontend-edit: false
Copied!

Disabling the policy for a site 

config/sites/<identifier>/csp.yaml
active: false
Copied!

Adding sources of your own 

Site level mutations are applied after those of every package, so they are the place to widen or narrow a directive:

config/sites/<identifier>/csp.yaml
enforce:
  mutations:
    -   mode: extend
        directive: img-src
        sources:
            - 'https://images.example.org'
Copied!

Further reading 

The complete csp.yaml format, the reporting endpoint and the full list of mutation modes are documented by TYPO3 itself:

The reasoning behind each of the four declarations, including what was measured and what was rejected, is in the docblock of Configuration/ContentSecurityPolicies.php — it is written to be read.