Fixed
- #3902 Fix background callbacks trusting the client-supplied
job/oldJob/cancelJobandcacheKeyquery parameters verbatim, which let an unauthenticated client terminate an arbitrary process (withDiskcacheManager, by sending its PID) or read and delete arbitrary result-cache entries. ThecacheKey/jobhandles are now HMAC-signed by the server and bound to a per-page-load token, so forged or replayed values are rejected. Handles stay opaque to the renderer, so no app or callback code changes are required. - 3883 Fix callbacks being registered twice when running the app file as a script with a server that loads it by import string, e.g.
uvicorn.run("app:server", reload=True)withbackend="fastapi". The spawned worker re-executes the main module as__mp_main__and the import string then executed the same file a second time, duplicating every callback in_dash-dependenciesand triggeringDuplicate callback outputserrors in the renderer.Dash()now pre-registers the running main module insys.modulesunder its canonical import name so the second import reuses it instead of re-executing the file. Fixes #3818. - 3885 Fix Flask-WTF
CSRFProtect(and Quart-WTF) exemptions breaking after the backend refactor. The callback dispatch view is now exposed with the fully-qualified namedash.dash.dispatchagain, socsrf._exempt_views.add("dash.dash.dispatch")works as it did in Dash 4.1.0. Fixes #3827. - #3882 Fix
dcc.Graphuser interactions (pan, zoom, edited shapes & annotations, ...) being reverted by a subsequentPatchupdate, by syncing all relayout changes back to thefigureprop instead of only shapes. Fixes #3810. - #3903 Fix missing comm dependency, fix #3657.
- Updated radix-ui to fix #3786