Linus Rath
6f1cad1c98
fix: close theme CSS sanitizer bypasses and enforce :root/.dark selectors
...
The theme sanitizer was a short denylist. It missed protocol-relative
`url(//host)`, schemes and keywords spelled with CSS escapes
(`url(\68ttps:...)`, `@\69mport`), `image-set("https://...")` and
`@font-face` sources, so a theme could load remote resources from the
app document. `validateThemeSelectors` was never called, so theme CSS
could also target `input[type=password]` or restyle real UI. The admin
routes and the zip validator only sanitized when the safety check
failed, and CSS returned by the `onThemeBeforeApply` plugin hook was
injected as-is.
- every `url()` except a `#fragment` and every `image-set()` is removed
with its arguments; a banned construct spelled with escapes drops the
whole stylesheet
- theme CSS keeps only `:root` and `.dark` rules (no nested rules),
plus `@font-face`, `@keyframes` and `@media`/`@supports` wrappers
- sanitizing is unconditional everywhere, including plugin-transformed
CSS; compiled token values may not contain escapes or `url()`
2026-09-26 14:36:02 +02:00
..
2026-09-26 14:36:02 +02:00
2026-09-24 21:15:22 +02:00
2026-09-26 14:05:05 +02:00
2026-09-20 19:59:37 +02:00
2026-09-26 14:30:19 +02:00
2026-09-22 21:04:18 +02:00
2026-09-26 14:05:05 +02:00
2026-09-26 14:30:19 +02:00
2026-09-24 18:23:11 +02:00
2026-09-26 14:26:33 +02:00
2026-08-06 16:47:20 +02:00
2026-09-26 14:00:01 +02:00
2026-05-21 23:35:58 +02:00
2026-09-22 20:14:42 +02:00
2026-09-22 20:28:01 +02:00
2026-09-26 14:00:01 +02:00
2026-08-29 12:46:39 +02:00
2026-08-25 19:16:20 +02:00
2026-09-23 19:03:37 +02:00
2026-08-13 23:01:41 +02:00
2026-09-10 10:14:25 +02:00
2026-09-10 10:45:45 +02:00
2026-06-19 12:31:07 +02:00
2026-09-19 00:53:53 +02:00
2026-09-19 13:01:07 +02:00
2026-07-07 23:26:36 +02:00
2026-08-16 21:18:57 +02:00
2026-09-03 22:12:15 -07:00
2026-08-29 11:03:48 +02:00
2026-04-21 17:42:52 +02:00
2026-04-16 16:54:09 +02:00
2026-09-07 16:48:26 +08:00
2026-09-09 18:27:01 +02:00
2026-09-09 16:38:55 +02:00
2026-08-25 18:50:50 +02:00
2026-02-17 01:09:57 +01:00
2026-04-12 01:10:28 +02:00
2026-09-01 20:55:13 +02:00
2026-09-01 20:55:13 +02:00
2026-09-17 21:42:16 +02:00
2026-09-21 20:52:02 +02:00
2026-08-31 20:41:45 +02:00
2026-09-19 13:32:41 +02:00
2026-08-25 19:36:04 +02:00
2026-09-23 19:41:44 +02:00
2026-09-26 14:13:33 +02:00
2026-09-17 21:08:37 +02:00
2026-06-25 01:04:26 +02:00
2026-05-06 20:07:36 +02:00
2026-05-22 15:22:33 +02:00
2026-08-20 16:49:31 +02:00
2026-09-22 20:54:01 +02:00
2026-09-26 14:30:19 +02:00
2026-08-20 14:21:41 +02:00
2026-07-29 11:41:34 +12:00
2026-06-15 23:15:04 +02:00
2026-09-24 21:15:22 +02:00
2026-05-18 16:01:29 +02:00
2026-07-08 15:42:42 +02:00
2026-07-21 23:26:51 +02:00
2026-08-06 18:44:14 +02:00
2026-07-29 17:18:38 +02:00
2026-07-29 17:18:42 +02:00
2026-09-23 18:09:35 +02:00
2026-09-21 23:45:08 +02:00
2026-09-18 22:16:57 +02:00
2026-09-19 00:53:53 +02:00
2026-09-17 23:54:33 +02:00
2026-09-19 00:53:53 +02:00
2026-02-16 18:51:30 +01:00
2026-06-24 19:32:13 +02:00
2026-09-17 20:55:39 +02:00
2026-09-23 21:01:48 +02:00
2026-07-04 14:52:26 +02:00
2026-08-29 18:11:50 +02:00
2026-08-31 09:55:06 +02:00
2026-05-30 15:56:55 +02:00
2026-08-31 09:55:06 +02:00
2026-06-25 01:04:26 +02:00
2026-09-07 22:34:47 +02:00
2026-09-26 14:36:02 +02:00
2026-09-26 14:36:02 +02:00
2026-08-16 23:04:22 +02:00
2026-07-22 19:17:23 +02:00
2026-06-25 00:25:28 +02:00
2026-04-09 22:13:08 +02:00
2026-09-23 13:40:01 +02:00
2026-09-23 13:40:01 +02:00
2026-09-23 13:40:01 +02:00
2026-08-25 21:13:34 +02:00
2026-09-09 19:27:08 +02:00
2026-08-16 21:12:21 +02:00
2026-08-06 19:19:18 +02:00
2026-09-22 17:25:43 +02:00
2026-08-29 17:47:23 +02:00
2026-08-25 20:09:18 +02:00
2026-09-23 18:31:27 +02:00
2026-09-26 12:54:30 +02:00
2026-05-09 17:37:41 +02:00
2026-05-31 15:52:27 +02:00
2026-09-19 13:32:41 +02:00
2026-08-16 22:20:49 +02:00
2026-05-06 20:07:36 +02:00
2026-08-18 15:48:05 +02:00
2026-07-19 10:10:31 +02:00
2026-08-16 22:20:49 +02:00
2026-08-06 18:23:21 +02:00
2026-09-26 14:36:02 +02:00
2026-09-19 13:32:41 +02:00
2026-09-26 14:36:02 +02:00
2026-08-16 02:19:04 +02:00
2026-09-18 18:33:02 +02:00
2026-09-22 20:42:07 +02:00
2026-09-26 14:15:10 +02:00
2026-09-22 19:41:51 +02:00
2026-08-23 19:44:56 +06:00
2026-09-24 17:47:33 +02:00
2026-07-08 15:41:46 +02:00
2026-08-31 23:53:24 +02:00
2026-05-21 23:35:58 +02:00
2026-09-23 05:56:28 +02:00