Privacy and security
Allowlist first
The collectors of Context Reporter read an allowlist of metadata, described in Collected context. Everything that will be sent is shown in the report dialog before the reporter submits it.
The collectors do not read:
.envfiles, environment variables, database credentials or other configuration values- API keys, access tokens or SMTP credentials
- cookies, session data,
Authorizationheaders or any other HTTP header $GLOBALS, configuration dumps or database dumps- record field values other than the record label, for example body text, and no form contents; multi-line text is never used as record label
- file contents, file metadata values or storage configuration
- the backend log, unless privacy.recentBackendErrors is enabled
Labels are data, too: page titles, record labels, file and folder names and the names of sites, languages and workspaces are part of the report, because they identify the object. Choose the destinations of the reports accordingly.
What the reporter writes and what the screenshot shows is up to the reporter. The dialog asks reporters to redact confidential information before they send a screenshot.
Backend URLs are reduced to allowlisted parameters. CSRF tokens and return URLs are removed in the browser and again on the server.
Recent backend errors
privacy.recentBackendErrors is off by default. When it is
enabled, reports contain up to ten error and warning entries of the reporter
from the backend log (
sys_) of the last 30 minutes, each shortened
to 300 characters. Log messages are written by TYPO3 and by other extensions.
They can contain record titles, file names, field values or other sensitive
diagnostic text, and Context Reporter cannot filter them reliably. Enable the
option only if everyone who receives the reports may see such text.
Reporter identity
By default, only the backend user UID and username are shared. Real name, email address and groups can be enabled separately, see Privacy.
Screenshots
- Screenshots are created and edited in the browser. They are only sent to the TYPO3 installation and from there to the destinations you have configured; Context Reporter uses no external service.
- Nothing is uploaded before the reporter clicks Send report or Save and download.
- Annotations and redactions are merged into the image before upload. Redacted areas are covered with opaque black boxes, so the covered pixels are not part of the uploaded image.
- Screen capture uses the browser's own picker and captures a single frame.
- The server accepts PNG and JPEG images only and checks the file signature, size and dimensions.
Storage
Reports are stored in three tables of the TYPO3 database:
tx_contextreporter_ report - The report, including the complete context document as JSON, the review state and the delivery state.
tx_contextreporter_ attachment - Screenshots, as binary data (
MEDIUMBLOBon MariaDB and MySQL, up to 16 MB). tx_contextreporter_ delivery - The delivery history.
No files are written to fileadmin or var, so screenshots are
not reachable by a URL and are part of every database backup. Keep this in
mind for the size of the database and its backups, and for copies of the
production database on other systems.
- The default retention keeps reports forever, so the database grows with every report. Configure reporting.retentionDays and schedule the cleanup if the history should not grow indefinitely.
- A screenshot is stored in one database query. The largest screenshot
(reporting.maxScreenshotSizeKb, at most 15 MB) must fit
into the
max_allowed_packetof MariaDB or MySQL (16 MB by default in MariaDB, 64 MB in MySQL 8). - The settings page shows how many reports, screenshots (with their size) and delivery attempts are stored.
Protection of reports
- The context shown in the dialog is sealed with an HMAC when the dialog opens. The server rejects reports whose context was changed, whose draft is older than six hours, or whose draft belongs to another user.
-
Reports can only reference objects the reporter can access:
- pages within the web mounts and page permissions of the reporter, and records of tables the reporter may read, on such pages;
- files and folders in the file storages and file mounts of the reporter, with read permission;
- file metadata (
sys_) and file references on the root page only when the reporter can access the file;file_ metadata - in workspaces: live records and versions of the reporter's current workspace only. A workspace version is reported with the live UID of its record. Records of other workspaces are rejected, also when their UIDs appear in the URL of the editing form.
- Reports are stored in the TYPO3 database. Only administrators can open the report history, change settings, send test deliveries, run the cleanup and mark reports as resolved; every one of these actions checks this again and requires the backend route token. Deleting a report and running the cleanup need a confirmation. Reporters can download their own reports.
- Downloads are sent with
Cache-Control: private, no-store,X-Content-Type-Options: nosniffand a restrictive Content Security Policy. - The Markdown version of a report escapes the text that users entered, so it cannot add images, links, HTML or headings to a ticket.
- A rate limit per user protects the destinations.
Secrets and error messages
- The webhook URL, secret and authentication header can be read from
environment variables, see Secrets from environment variables. Values that
are entered in the settings are stored in
sys_.registry - Secrets are write-only in the settings: the page shows whether a value is configured, never the value. Stored webhook URLs are reduced to scheme and host.
- Error messages are sanitized before they are stored or shown: URLs and configured secrets (also URL-encoded), the path and query of the webhook URL, and the SMTP user name, password and DSN of the TYPO3 mail configuration are removed.
- A ticket reference returned by a webhook receiver is dropped when it is a
URL or contains a configured secret. A returned link loses query
parameters such as
tokenorsignature, and is dropped when it contains credentials or a configured secret. The same rules apply when the delivery history is displayed. - Log entries of failed collectors and deliveries contain a sanitized, shortened message, the exception class and code and the file and line, but not the exception object or its trace.
- The email body template must be a
.txtfile belowResources/of an extension, so the settings cannot be used to send other files of the installation, such asPrivate/ .env, by email. - The email status shows the mail transport without credentials.
Webhook: trusted administrators
The webhook is configured by TYPO3 administrators, and Context Reporter trusts them with outbound requests:
- Destinations: an administrator chooses the URL that receives the reports. Context Reporter requires HTTPS (unless webhook.allowInsecureHttp is enabled) and does not follow redirects, but it does not check whether the host is an internal address. The TYPO3 server sends the request, so it can reach services of your internal network.
- Environment variables: webhook.url, webhook.secret and webhook.authHeaderValue accept any environment variable reference. The value of the variable is sent to the configured endpoint, as signing key or header value. An administrator who can change the webhook settings can therefore send the value of an environment variable to an endpoint of their choice. The value is never shown in the backend.
- Requests: reports and Send test webhook send requests whenever an administrator or reporter triggers them, with the configured timeout.
If administrators should not have these possibilities:
-
Pin the webhook settings in the system configuration, for example
config/, which only system maintainers can change. Pinned values are read-only in the settings, see Where settings are stored:system/ additional. php config/system/additional.php$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['context_reporter']['webhook'] = [ 'enabled' => true, 'url' => '%env(CONTEXT_REPORTER_WEBHOOK_URL)%', 'secret' => '%env(CONTEXT_REPORTER_WEBHOOK_SECRET)%', 'authHeaderName' => '', 'authHeaderValue' => '', 'allowInsecureHttp' => false, ];Copied!Keys that are not pinned remain editable. Pin at least
enabled,url,secret,authHeaderName,authHeaderValueandallowInsecureHttp, also when their value is empty. Pinned values take precedence over values that were saved in the settings before. - Or switch the webhook off in the system configuration
(
['webhook']['enabled'] = false). - Restrict outbound connections of the web server at the network level, for example with a firewall or an egress proxy, if the server must not reach internal services.
Retention
Reports are kept until they are deleted or removed by the cleanup. The default retention keeps reports forever; no report is removed automatically. Deleting a report also deletes its screenshot and delivery history in the same database transaction. Copies that were emailed, downloaded, copied or sent to a webhook are not affected.
To report a security issue, see Security.