Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256)#22657
Conversation
|
Claude encountered an error —— View job I'll analyze this and get back to you. |
There was a problem hiding this comment.
Pull request overview
Prevents Redirect URL Management from recording redirects originating from unroutable URL provider sentinels when content has no published URL (e.g., after previewing unpublished content and then publishing).
Changes:
- Tightens
RedirectTracker.IsValidRouteto rejectConstants.Routing.Unroutable("#"). - Adds an additional
IsValidRoute(oldRoute)guard inRedirectTracker.CreateRedirectsbefore registering redirects. - Adds an integration test ensuring no redirects are created when the stored old route is
Constants.Routing.Unroutable.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
src/Umbraco.Infrastructure/Routing/RedirectTracker.cs |
Filters out unroutable sentinel routes and adds defense-in-depth validation before registering redirects. |
tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Routing/RedirectTrackerTests.cs |
Adds coverage to ensure unroutable old routes don’t create redirect entries. |
…after preview was left open.
|
@AndyButland is it possible to include this in v17.4.0 as this is a critical issue. Content editors often use "Save & preview" and don't understand why these automatic redirects are created. |
|
@bjarnef good input, it was probably more critical than I initially realized, sorry about that! I've cherry picked this and it will go in 17.4.0-rc2, which we're aiming to release sometime next week (hopefully monday, but lets see) 😁 |
Updated [Umbraco.Cms](https://github.com/umbraco/Umbraco-CMS) from 17.3.4 to 17.4.0. <details> <summary>Release notes</summary> _Sourced from [Umbraco.Cms's releases](https://github.com/umbraco/Umbraco-CMS/releases)._ ## 17.4.0 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-rc3 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc3...release-17.4.0 ## What's Changed Since 17.4.0-r2 ### 📦 Dependencies * Bump @umbraco-ui/uui to 1.17.3 by @iOvergaard in umbraco/Umbraco-CMS#22753 ### 🔒 Security * Backoffice: Add `localize.htmlString()` helper to prevent XSS in HTML-rendered translations by @iOvergaard in umbraco/Umbraco-CMS#22731 ### 🐛 Bug Fixes * Auth: Un-deprecate getLatestToken and route per-request fetches through it by @iOvergaard in umbraco/Umbraco-CMS#22736 * Color Picker: Refresh stored label when data type label changes (closes #22741) by @AndyButland in umbraco/Umbraco-CMS#22761 * Published Content: Fix Fallback.ToAncestors with no match throwing exception at property level (closes #22759) by @AndyButland in umbraco/Umbraco-CMS#22763 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc2...release-17.4.0-rc3 ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 ... (truncated) ## 17.4.0-rc3 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-r2 ### 📦 Dependencies * Bump @umbraco-ui/uui to 1.17.3 by @iOvergaard in umbraco/Umbraco-CMS#22753 ### 🔒 Security * Backoffice: Add `localize.htmlString()` helper to prevent XSS in HTML-rendered translations by @iOvergaard in umbraco/Umbraco-CMS#22731 ### 🐛 Bug Fixes * Auth: Un-deprecate getLatestToken and route per-request fetches through it by @iOvergaard in umbraco/Umbraco-CMS#22736 * Color Picker: Refresh stored label when data type label changes (closes #22741) by @AndyButland in umbraco/Umbraco-CMS#22761 * Published Content: Fix Fallback.ToAncestors with no match throwing exception at property level (closes #22759) by @AndyButland in umbraco/Umbraco-CMS#22763 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc2...release-17.4.0-rc3 ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ... (truncated) ## 17.4.0-rc2 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ### 💥 Breaking Changes * Application URL: Add `ApplicationUrlDetection` setting to control application URL auto-detection by @AndyButland in umbraco/Umbraco-CMS#22307 ### 📦 Dependencies * Bump lodash from 4.17.23 to 4.18.1 in /src/Umbraco.Web.UI.Login by @dependabot[bot] in umbraco/Umbraco-CMS#22334 * Dependencies: Update minor and patch versions by @AndyButland in umbraco/Umbraco-CMS#22498 * Update npm dependencies for v17.4.0-rc by @NguyenThuyLan in umbraco/Umbraco-CMS#22464 * Bump the npm_and_yarn group across 3 directories with 4 updates by @dependabot[bot] in umbraco/Umbraco-CMS#22537 * Dependencies: Update Microsoft packages to latest patch and fix HybridCache ParseFault with Redis by @AndyButland in umbraco/Umbraco-CMS#22278 * Dependencies: Pin `System.Security.Cryptography.Xml` to resolve vulnerability warning by @AndyButland in umbraco/Umbraco-CMS#22514 ### 🚤 Performance * Performance: Batch backoffice media thumbnail URL requests to reduce N+1 API calls by @AndyButland in umbraco/Umbraco-CMS#22329 * Performance: Optimize `FullDataSetRepositoryCachePolicy` usage across all repositories by @AndyButland in umbraco/Umbraco-CMS#22264 * Performance: Optimize `ContentTypeRepository` deep-clone on cache reads (closes #22250) by @AndyButland in umbraco/Umbraco-CMS#22263 * Performance: Use `GeneratedRegex` instead of generating at runtime in string extensions by @Henr1k80 in umbraco/Umbraco-CMS#22534 * Performance: Avoid allocating a string if `_publishedContentCache` has a cached version in `MediaCacheService` by @Henr1k80 in umbraco/Umbraco-CMS#22535 * Performance: Micro-optimisation in `UdiParser` (eliminate closure, fix naming & formatting of exceptions) by @Henr1k80 in umbraco/Umbraco-CMS#22506 ... (truncated) ## 17.4.0-rc ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ### 💥 Breaking Changes * Application URL: Add `ApplicationUrlDetection` setting to control application URL auto-detection by @AndyButland in umbraco/Umbraco-CMS#22307 ### 📦 Dependencies * Bump lodash from 4.17.23 to 4.18.1 in /src/Umbraco.Web.UI.Login by @dependabot[bot] in umbraco/Umbraco-CMS#22334 * Dependencies: Update minor and patch versions by @AndyButland in umbraco/Umbraco-CMS#22498 * Update npm dependencies for v17.4.0-rc by @NguyenThuyLan in umbraco/Umbraco-CMS#22464 * Bump the npm_and_yarn group across 3 directories with 4 updates by @dependabot[bot] in umbraco/Umbraco-CMS#22537 * Dependencies: Update Microsoft packages to latest patch and fix HybridCache ParseFault with Redis by @AndyButland in umbraco/Umbraco-CMS#22278 * Dependencies: Pin `System.Security.Cryptography.Xml` to resolve vulnerability warning by @AndyButland in umbraco/Umbraco-CMS#22514 ### 🚤 Performance * Performance: Batch backoffice media thumbnail URL requests to reduce N+1 API calls by @AndyButland in umbraco/Umbraco-CMS#22329 * Performance: Optimize `FullDataSetRepositoryCachePolicy` usage across all repositories by @AndyButland in umbraco/Umbraco-CMS#22264 * Performance: Optimize `ContentTypeRepository` deep-clone on cache reads (closes #22250) by @AndyButland in umbraco/Umbraco-CMS#22263 * Performance: Use `GeneratedRegex` instead of generating at runtime in string extensions by @Henr1k80 in umbraco/Umbraco-CMS#22534 * Performance: Avoid allocating a string if `_publishedContentCache` has a cached version in `MediaCacheService` by @Henr1k80 in umbraco/Umbraco-CMS#22535 * Performance: Micro-optimisation in `UdiParser` (eliminate closure, fix naming & formatting of exceptions) by @Henr1k80 in umbraco/Umbraco-CMS#22506 * Micro-optimization: Use Array.ConvertAll instead of LINQ .Select .ToArray by @Henr1k80 in umbraco/Umbraco-CMS#20292 * Entity Service: Batch GetAllPaths queries to avoid SQL Server parameter limit (closes #22470) by @AndyButland in umbraco/Umbraco-CMS#22471 * Document URL Service: Batch delete of obsolete URL segment records to avoid SQL Server parameter limit (closes #22339) by @AndyButland in umbraco/Umbraco-CMS#22340 * Content Version Cleanup: Optimize for large datasets (closes #22224) by @AndyButland in umbraco/Umbraco-CMS#22239 * Migrations: Optimise sortable value population for date properties by @AndyButland in umbraco/Umbraco-CMS#22547 * Migrations: Fix potential `OptimizeInvariantUrlRecords` timeout on SQL Server (closes #22377) by @AndyButland in umbraco/Umbraco-CMS#22382 * Umb-icon color setting optimization by @nielslyngsoe in umbraco/Umbraco-CMS#22433 ### 🌈 Accessibility Improvements * Accessibility: Fix missing labels on uui-select elements causing console warnings by @andreaslborg in umbraco/Umbraco-CMS#22385 * Accessibility: Include visible initials in name displayed on account menu button (closes #21942) by @andreaslborg in umbraco/Umbraco-CMS#22117 ... (truncated) ## 17.3.5 ## What's Changed ### 🐛 Bug Fixes * Revert fix for making block editors read-only in trashed documents which causes a regression in certain multi-lingual block editing scenarios (closes #22472, re-opens #21982) by @nielslyngsoe in umbraco/Umbraco-CMS#22656 **Full Changelog**: umbraco/Umbraco-CMS@release-17.3.4...release-17.3.5 Commits viewable in [compare view](umbraco/Umbraco-CMS@release-17.3.4...release-17.4.0). </details> Updated [Umbraco.Cms.Persistence.Sqlite](https://github.com/umbraco/Umbraco-CMS) from 17.3.4 to 17.4.0. <details> <summary>Release notes</summary> _Sourced from [Umbraco.Cms.Persistence.Sqlite's releases](https://github.com/umbraco/Umbraco-CMS/releases)._ ## 17.4.0 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-rc3 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc3...release-17.4.0 ## What's Changed Since 17.4.0-r2 ### 📦 Dependencies * Bump @umbraco-ui/uui to 1.17.3 by @iOvergaard in umbraco/Umbraco-CMS#22753 ### 🔒 Security * Backoffice: Add `localize.htmlString()` helper to prevent XSS in HTML-rendered translations by @iOvergaard in umbraco/Umbraco-CMS#22731 ### 🐛 Bug Fixes * Auth: Un-deprecate getLatestToken and route per-request fetches through it by @iOvergaard in umbraco/Umbraco-CMS#22736 * Color Picker: Refresh stored label when data type label changes (closes #22741) by @AndyButland in umbraco/Umbraco-CMS#22761 * Published Content: Fix Fallback.ToAncestors with no match throwing exception at property level (closes #22759) by @AndyButland in umbraco/Umbraco-CMS#22763 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc2...release-17.4.0-rc3 ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 ... (truncated) ## 17.4.0-rc3 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-r2 ### 📦 Dependencies * Bump @umbraco-ui/uui to 1.17.3 by @iOvergaard in umbraco/Umbraco-CMS#22753 ### 🔒 Security * Backoffice: Add `localize.htmlString()` helper to prevent XSS in HTML-rendered translations by @iOvergaard in umbraco/Umbraco-CMS#22731 ### 🐛 Bug Fixes * Auth: Un-deprecate getLatestToken and route per-request fetches through it by @iOvergaard in umbraco/Umbraco-CMS#22736 * Color Picker: Refresh stored label when data type label changes (closes #22741) by @AndyButland in umbraco/Umbraco-CMS#22761 * Published Content: Fix Fallback.ToAncestors with no match throwing exception at property level (closes #22759) by @AndyButland in umbraco/Umbraco-CMS#22763 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc2...release-17.4.0-rc3 ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ... (truncated) ## 17.4.0-rc2 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ### 💥 Breaking Changes * Application URL: Add `ApplicationUrlDetection` setting to control application URL auto-detection by @AndyButland in umbraco/Umbraco-CMS#22307 ### 📦 Dependencies * Bump lodash from 4.17.23 to 4.18.1 in /src/Umbraco.Web.UI.Login by @dependabot[bot] in umbraco/Umbraco-CMS#22334 * Dependencies: Update minor and patch versions by @AndyButland in umbraco/Umbraco-CMS#22498 * Update npm dependencies for v17.4.0-rc by @NguyenThuyLan in umbraco/Umbraco-CMS#22464 * Bump the npm_and_yarn group across 3 directories with 4 updates by @dependabot[bot] in umbraco/Umbraco-CMS#22537 * Dependencies: Update Microsoft packages to latest patch and fix HybridCache ParseFault with Redis by @AndyButland in umbraco/Umbraco-CMS#22278 * Dependencies: Pin `System.Security.Cryptography.Xml` to resolve vulnerability warning by @AndyButland in umbraco/Umbraco-CMS#22514 ### 🚤 Performance * Performance: Batch backoffice media thumbnail URL requests to reduce N+1 API calls by @AndyButland in umbraco/Umbraco-CMS#22329 * Performance: Optimize `FullDataSetRepositoryCachePolicy` usage across all repositories by @AndyButland in umbraco/Umbraco-CMS#22264 * Performance: Optimize `ContentTypeRepository` deep-clone on cache reads (closes #22250) by @AndyButland in umbraco/Umbraco-CMS#22263 * Performance: Use `GeneratedRegex` instead of generating at runtime in string extensions by @Henr1k80 in umbraco/Umbraco-CMS#22534 * Performance: Avoid allocating a string if `_publishedContentCache` has a cached version in `MediaCacheService` by @Henr1k80 in umbraco/Umbraco-CMS#22535 * Performance: Micro-optimisation in `UdiParser` (eliminate closure, fix naming & formatting of exceptions) by @Henr1k80 in umbraco/Umbraco-CMS#22506 ... (truncated) ## 17.4.0-rc ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ### 💥 Breaking Changes * Application URL: Add `ApplicationUrlDetection` setting to control application URL auto-detection by @AndyButland in umbraco/Umbraco-CMS#22307 ### 📦 Dependencies * Bump lodash from 4.17.23 to 4.18.1 in /src/Umbraco.Web.UI.Login by @dependabot[bot] in umbraco/Umbraco-CMS#22334 * Dependencies: Update minor and patch versions by @AndyButland in umbraco/Umbraco-CMS#22498 * Update npm dependencies for v17.4.0-rc by @NguyenThuyLan in umbraco/Umbraco-CMS#22464 * Bump the npm_and_yarn group across 3 directories with 4 updates by @dependabot[bot] in umbraco/Umbraco-CMS#22537 * Dependencies: Update Microsoft packages to latest patch and fix HybridCache ParseFault with Redis by @AndyButland in umbraco/Umbraco-CMS#22278 * Dependencies: Pin `System.Security.Cryptography.Xml` to resolve vulnerability warning by @AndyButland in umbraco/Umbraco-CMS#22514 ### 🚤 Performance * Performance: Batch backoffice media thumbnail URL requests to reduce N+1 API calls by @AndyButland in umbraco/Umbraco-CMS#22329 * Performance: Optimize `FullDataSetRepositoryCachePolicy` usage across all repositories by @AndyButland in umbraco/Umbraco-CMS#22264 * Performance: Optimize `ContentTypeRepository` deep-clone on cache reads (closes #22250) by @AndyButland in umbraco/Umbraco-CMS#22263 * Performance: Use `GeneratedRegex` instead of generating at runtime in string extensions by @Henr1k80 in umbraco/Umbraco-CMS#22534 * Performance: Avoid allocating a string if `_publishedContentCache` has a cached version in `MediaCacheService` by @Henr1k80 in umbraco/Umbraco-CMS#22535 * Performance: Micro-optimisation in `UdiParser` (eliminate closure, fix naming & formatting of exceptions) by @Henr1k80 in umbraco/Umbraco-CMS#22506 * Micro-optimization: Use Array.ConvertAll instead of LINQ .Select .ToArray by @Henr1k80 in umbraco/Umbraco-CMS#20292 * Entity Service: Batch GetAllPaths queries to avoid SQL Server parameter limit (closes #22470) by @AndyButland in umbraco/Umbraco-CMS#22471 * Document URL Service: Batch delete of obsolete URL segment records to avoid SQL Server parameter limit (closes #22339) by @AndyButland in umbraco/Umbraco-CMS#22340 * Content Version Cleanup: Optimize for large datasets (closes #22224) by @AndyButland in umbraco/Umbraco-CMS#22239 * Migrations: Optimise sortable value population for date properties by @AndyButland in umbraco/Umbraco-CMS#22547 * Migrations: Fix potential `OptimizeInvariantUrlRecords` timeout on SQL Server (closes #22377) by @AndyButland in umbraco/Umbraco-CMS#22382 * Umb-icon color setting optimization by @nielslyngsoe in umbraco/Umbraco-CMS#22433 ### 🌈 Accessibility Improvements * Accessibility: Fix missing labels on uui-select elements causing console warnings by @andreaslborg in umbraco/Umbraco-CMS#22385 * Accessibility: Include visible initials in name displayed on account menu button (closes #21942) by @andreaslborg in umbraco/Umbraco-CMS#22117 ... (truncated) ## 17.3.5 ## What's Changed ### 🐛 Bug Fixes * Revert fix for making block editors read-only in trashed documents which causes a regression in certain multi-lingual block editing scenarios (closes #22472, re-opens #21982) by @nielslyngsoe in umbraco/Umbraco-CMS#22656 **Full Changelog**: umbraco/Umbraco-CMS@release-17.3.4...release-17.3.5 Commits viewable in [compare view](umbraco/Umbraco-CMS@release-17.3.4...release-17.4.0). </details> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Updated [Umbraco.Cms.DevelopmentMode.Backoffice](https://github.com/umbraco/Umbraco-CMS) from 17.3.4 to 17.4.0. <details> <summary>Release notes</summary> _Sourced from [Umbraco.Cms.DevelopmentMode.Backoffice's releases](https://github.com/umbraco/Umbraco-CMS/releases)._ ## 17.4.0 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-rc3 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc3...release-17.4.0 ## What's Changed Since 17.4.0-r2 ### 📦 Dependencies * Bump @umbraco-ui/uui to 1.17.3 by @iOvergaard in umbraco/Umbraco-CMS#22753 ### 🔒 Security * Backoffice: Add `localize.htmlString()` helper to prevent XSS in HTML-rendered translations by @iOvergaard in umbraco/Umbraco-CMS#22731 ### 🐛 Bug Fixes * Auth: Un-deprecate getLatestToken and route per-request fetches through it by @iOvergaard in umbraco/Umbraco-CMS#22736 * Color Picker: Refresh stored label when data type label changes (closes #22741) by @AndyButland in umbraco/Umbraco-CMS#22761 * Published Content: Fix Fallback.ToAncestors with no match throwing exception at property level (closes #22759) by @AndyButland in umbraco/Umbraco-CMS#22763 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc2...release-17.4.0-rc3 ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 ... (truncated) ## 17.4.0-rc3 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-r2 ### 📦 Dependencies * Bump @umbraco-ui/uui to 1.17.3 by @iOvergaard in umbraco/Umbraco-CMS#22753 ### 🔒 Security * Backoffice: Add `localize.htmlString()` helper to prevent XSS in HTML-rendered translations by @iOvergaard in umbraco/Umbraco-CMS#22731 ### 🐛 Bug Fixes * Auth: Un-deprecate getLatestToken and route per-request fetches through it by @iOvergaard in umbraco/Umbraco-CMS#22736 * Color Picker: Refresh stored label when data type label changes (closes #22741) by @AndyButland in umbraco/Umbraco-CMS#22761 * Published Content: Fix Fallback.ToAncestors with no match throwing exception at property level (closes #22759) by @AndyButland in umbraco/Umbraco-CMS#22763 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc2...release-17.4.0-rc3 ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ... (truncated) ## 17.4.0-rc2 ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed Since 17.4.0-rc ### 🐛 Bug Fixes * Block permissions: Correction of read-only inheritance and language access (closes #22472, #21973) by @nielslyngsoe in umbraco/Umbraco-CMS#22522 * Redirect Tracker: Prevent creation of redirects from unrouteable URLs (closes #22652, #22256) by @AndyButland in umbraco/Umbraco-CMS#22657 * [Blueprints: Fix intermittent blank workspace when creating documents from blueprints (closes #21996)](umbraco/Umbraco-CMS#22422 (comment)) by @AndyButland in umbraco/Umbraco-CMS#22422 **Full Changelog**: umbraco/Umbraco-CMS@release-17.4.0-rc...release-17.4.0-rc2 ## What's Changed Since the Previous Version (17.3.5) ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ### 💥 Breaking Changes * Application URL: Add `ApplicationUrlDetection` setting to control application URL auto-detection by @AndyButland in umbraco/Umbraco-CMS#22307 ### 📦 Dependencies * Bump lodash from 4.17.23 to 4.18.1 in /src/Umbraco.Web.UI.Login by @dependabot[bot] in umbraco/Umbraco-CMS#22334 * Dependencies: Update minor and patch versions by @AndyButland in umbraco/Umbraco-CMS#22498 * Update npm dependencies for v17.4.0-rc by @NguyenThuyLan in umbraco/Umbraco-CMS#22464 * Bump the npm_and_yarn group across 3 directories with 4 updates by @dependabot[bot] in umbraco/Umbraco-CMS#22537 * Dependencies: Update Microsoft packages to latest patch and fix HybridCache ParseFault with Redis by @AndyButland in umbraco/Umbraco-CMS#22278 * Dependencies: Pin `System.Security.Cryptography.Xml` to resolve vulnerability warning by @AndyButland in umbraco/Umbraco-CMS#22514 ### 🚤 Performance * Performance: Batch backoffice media thumbnail URL requests to reduce N+1 API calls by @AndyButland in umbraco/Umbraco-CMS#22329 * Performance: Optimize `FullDataSetRepositoryCachePolicy` usage across all repositories by @AndyButland in umbraco/Umbraco-CMS#22264 * Performance: Optimize `ContentTypeRepository` deep-clone on cache reads (closes #22250) by @AndyButland in umbraco/Umbraco-CMS#22263 * Performance: Use `GeneratedRegex` instead of generating at runtime in string extensions by @Henr1k80 in umbraco/Umbraco-CMS#22534 * Performance: Avoid allocating a string if `_publishedContentCache` has a cached version in `MediaCacheService` by @Henr1k80 in umbraco/Umbraco-CMS#22535 * Performance: Micro-optimisation in `UdiParser` (eliminate closure, fix naming & formatting of exceptions) by @Henr1k80 in umbraco/Umbraco-CMS#22506 ... (truncated) ## 17.4.0-rc ## Upgrade Notes Be aware of a change to behaviour for detecting the Umbraco application URL. Previously, `ApplicationMainUrl` was automatically set from the Host header of incoming HTTP requests. In environments where Umbraco is not behind a reverse proxy that validates the Host header, this could allow a forged Host header to overwrite the URL used in password reset links, user invitations, and other email notifications. While this is normally mitigated by proper hosting configuration and setting `UmbracoApplicationUrl` explicitly, we felt that the auto-detection behaviour should be hardened up and become an opt-in rather than the default. You can read more about this under "Breaking Changes" below, the [linked PR](umbraco/Umbraco-CMS#22307) and the [documentation](https://docs.umbraco.com/umbraco-cms/reference/configuration/webroutingsettings#application-url-detection). There are a few updates related to performance in this release that are worth investigating for larger sites. Using output cache in your projects, with intelligent and customisable detection of page invalidation, is now a [configuration option for templated websites](https://docs.umbraco.com/umbraco-cms/reference/website-output-caching), with extension points also [applied for the Delivery API](https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/output-caching). We have optimised content cache rebuild after schema updates, with an option for [deferred rebuild in the background](https://docs.umbraco.com/umbraco-cms/reference/configuration/cache-settings#contenttyperebuildmode). If considering a project with significant expected concurrency for member login and registration, and you prefer to use an external service for member management, the new option for [lightweight external members](https://docs.umbraco.com/umbraco-cms/reference/security/lightweight-external-members) will be worth reviewing. If working with AI tools such as Umbraco MCP, additions to management API endpoints that expose JSON schema for data types and allow for patch updates of specific properties, should improve accuracy and reliability. As usual please find the full list of PRs that have contributed to Umbraco 17.4 as follows. ## What's Changed ### 🙌 Notable Changes * Management API: Add JSON Schema support for data types and content types by @Migaroez in umbraco/Umbraco-CMS#21771 * Media Picker: Add Cards/Table view switcher (closes #22005) by @madsrasmussen in umbraco/Umbraco-CMS#22138 * Management API: Add document patch endpoint by @Migaroez in umbraco/Umbraco-CMS#22104 * Website Rendering: Add configurable output caching for template rendered pages by @AndyButland in umbraco/Umbraco-CMS#22338 * Basic Authentication: Standalone login page for frontend-only deployments (closes #22144) by @AndyButland in umbraco/Umbraco-CMS#22168 * Icons: extends icon data + improved search by @nielslyngsoe in umbraco/Umbraco-CMS#22436 * Members: Add lightweight external-only members (closes #12741) by @AndyButland in umbraco/Umbraco-CMS#22162 * Cache: Add deferred content type rebuild mode with de-duplication by @AndyButland in umbraco/Umbraco-CMS#22194 ### 💥 Breaking Changes * Application URL: Add `ApplicationUrlDetection` setting to control application URL auto-detection by @AndyButland in umbraco/Umbraco-CMS#22307 ### 📦 Dependencies * Bump lodash from 4.17.23 to 4.18.1 in /src/Umbraco.Web.UI.Login by @dependabot[bot] in umbraco/Umbraco-CMS#22334 * Dependencies: Update minor and patch versions by @AndyButland in umbraco/Umbraco-CMS#22498 * Update npm dependencies for v17.4.0-rc by @NguyenThuyLan in umbraco/Umbraco-CMS#22464 * Bump the npm_and_yarn group across 3 directories with 4 updates by @dependabot[bot] in umbraco/Umbraco-CMS#22537 * Dependencies: Update Microsoft packages to latest patch and fix HybridCache ParseFault with Redis by @AndyButland in umbraco/Umbraco-CMS#22278 * Dependencies: Pin `System.Security.Cryptography.Xml` to resolve vulnerability warning by @AndyButland in umbraco/Umbraco-CMS#22514 ### 🚤 Performance * Performance: Batch backoffice media thumbnail URL requests to reduce N+1 API calls by @AndyButland in umbraco/Umbraco-CMS#22329 * Performance: Optimize `FullDataSetRepositoryCachePolicy` usage across all repositories by @AndyButland in umbraco/Umbraco-CMS#22264 * Performance: Optimize `ContentTypeRepository` deep-clone on cache reads (closes #22250) by @AndyButland in umbraco/Umbraco-CMS#22263 * Performance: Use `GeneratedRegex` instead of generating at runtime in string extensions by @Henr1k80 in umbraco/Umbraco-CMS#22534 * Performance: Avoid allocating a string if `_publishedContentCache` has a cached version in `MediaCacheService` by @Henr1k80 in umbraco/Umbraco-CMS#22535 * Performance: Micro-optimisation in `UdiParser` (eliminate closure, fix naming & formatting of exceptions) by @Henr1k80 in umbraco/Umbraco-CMS#22506 * Micro-optimization: Use Array.ConvertAll instead of LINQ .Select .ToArray by @Henr1k80 in umbraco/Umbraco-CMS#20292 * Entity Service: Batch GetAllPaths queries to avoid SQL Server parameter limit (closes #22470) by @AndyButland in umbraco/Umbraco-CMS#22471 * Document URL Service: Batch delete of obsolete URL segment records to avoid SQL Server parameter limit (closes #22339) by @AndyButland in umbraco/Umbraco-CMS#22340 * Content Version Cleanup: Optimize for large datasets (closes #22224) by @AndyButland in umbraco/Umbraco-CMS#22239 * Migrations: Optimise sortable value population for date properties by @AndyButland in umbraco/Umbraco-CMS#22547 * Migrations: Fix potential `OptimizeInvariantUrlRecords` timeout on SQL Server (closes #22377) by @AndyButland in umbraco/Umbraco-CMS#22382 * Umb-icon color setting optimization by @nielslyngsoe in umbraco/Umbraco-CMS#22433 ### 🌈 Accessibility Improvements * Accessibility: Fix missing labels on uui-select elements causing console warnings by @andreaslborg in umbraco/Umbraco-CMS#22385 * Accessibility: Include visible initials in name displayed on account menu button (closes #21942) by @andreaslborg in umbraco/Umbraco-CMS#22117 ... (truncated) ## 17.3.5 ## What's Changed ### 🐛 Bug Fixes * Revert fix for making block editors read-only in trashed documents which causes a regression in certain multi-lingual block editing scenarios (closes #22472, re-opens #21982) by @nielslyngsoe in umbraco/Umbraco-CMS#22656 **Full Changelog**: umbraco/Umbraco-CMS@release-17.3.4...release-17.3.5 Commits viewable in [compare view](umbraco/Umbraco-CMS@release-17.3.4...release-17.4.0). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Description
When a content node was previewed before being published, publishing it (or, in some cases, publishing a different never-published node afterwards) created an unwanted entry in the URL Tracker (Redirect URL Management) pointing at the newly-published URL.
Two distinct manifestations have been observed (the first I can replicate, the second I haven't been able to):
#— preview the node, close the preview tab without clicking exit preview (leaves the preview cookie active), then publish. The published URL provider resolves the draft to"#"(Constants.Routing.Unroutable), which was being stored as the "old route" and registered as a bogus# → /real-urlredirect.Root cause
Both paths share the same underlying issue: with the preview cookie active,
IPublishedUrlProvider.GetUrl()resolves URLs viaIDocumentUrlService.GetLegacyRouteFormat(..., isDraft: true). For never-published content,GetLegacyRouteFormatwalks ancestors-or-self and either:"#"(when no segment can be resolved), orRedirectTracker.StoreOldRoutewould capture whatever the URL provider returned, but if the content had never been published, there's nothing to redirect from, so no route should be captured.Fix
Two changes in
RedirectTracker:IsValidRouterejects unroutable indicators. It now returnsfalsefor routes starting withConstants.Routing.Unroutable("#").New
HasPublishedUrlSegmentgate inStoreOldRoute. Before storing a captured route, verify the content actually has a published URL segment inIDocumentUrlServicefor the given culture. IfGetUrlSegment(key, culture, isDraft: false)returnsnull, the content has never been published — there is no "old URL", so no route is stored.Resolves #22652 and #22256.
Testing
Automated
Two new integration tests in
RedirectTrackerTests:Does_Not_Create_Redirect_For_Unroutable_Old_Route— covers the#and#excases at theCreateRedirectsboundary.Does_Not_Store_Old_Route_For_Never_Published_Content_When_Url_Resolves_To_Ancestor— covers the parent-URL leakage at theStoreOldRouteboundary, with the URL provider mocked to return a parent-style URL andIDocumentUrlService.GetUrlSegment(..., isDraft: false)returningnull.A few existing tests were updated to set
CurrentPublishedSegmentso they accurately represent already-published content (matching the new gate's expectation).Manual
Scenario 1 — preview-then-publish (originally reported in #22652):
Before the fix: at least one entry redirecting from
#to the newly-published URL.After the fix: no entries are listed.
Scenario 2 — sibling created after a stale preview cookie (reported in #22256 (comment)):
Before the fix: an entry redirecting from the parent's URL to the newly-published URL.
After the fix: no entries are listed.