Every CDN-hosted script and stylesheet is now served from our own servers, closing a supply-chain exposure.
Strict Script Policy for the Application, Relaxed for Legacy Pages
Observation showed the main application needs no relaxation of the script policy, while a number of older server-rendered pages still carry inline scripts. The strict policy is applied to the application and the relaxed one only to those legacy pages, so a new page inherits the strict policy automatically rather than being missed off a list.
Self-Hosted Third-Party Assets
Server-rendered pages pulled executable JavaScript and CSS from four public content delivery networks, with no integrity checking, and at least one reference was unpinned — it resolved to whatever the current release happened to be. A compromised package would have executed in a logged-in user’s session with no deployment on our side. All of these assets are now served from our own static files, removing the third party entirely.