aboutsummaryrefslogtreecommitdiff
path: root/pnpm-lock.yaml
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-06-01 15:45:01 +0000
committerFuwn <[email protected]>2026-06-01 15:45:01 +0000
commit6a7228c06d7af2a28ead1f4ae1830a258c05afae (patch)
tree26a1fc3cc8546bd15dac92910998afb8c2a67fd9 /pnpm-lock.yaml
parentfix(security): allow-list web-push endpoints to stop SSRF (diff)
downloaddue.moe-6a7228c06d7af2a28ead1f4ae1830a258c05afae.tar.xz
due.moe-6a7228c06d7af2a28ead1f4ae1830a258c05afae.zip
fix(security): sanitize third-party RSS HTML before {@html}
The /updates page rendered manga/novel feed fields (content, titles, series names) from mangaupdates/syosetu/wlnupdates via {@html} with no sanitization. CSP already blocks script execution, but injected markup could still phish, redirect, or track. Add sanitizeFeedHtml (DOMPurify with a small safe allow-list) and apply it on ingest. A behaviour-gate test plus a check against the live mangaupdates feed confirm legitimate formatting (entities, <i>/<b>/<a href>) is preserved while <script>, event handlers, <iframe>/<meta>/<style> and javascript: URLs are removed.
Diffstat (limited to 'pnpm-lock.yaml')
-rw-r--r--pnpm-lock.yaml16
1 files changed, 16 insertions, 0 deletions
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d64ad94b..cc1644e5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -32,6 +32,9 @@ importers:
dexie:
specifier: ^4.0.1-alpha.25
version: 4.2.1
+ dompurify:
+ specifier: ^3.4.7
+ version: 3.4.7
effect:
specifier: 4.0.0-beta.25
version: 4.0.0-beta.25
@@ -2105,6 +2108,9 @@ packages:
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
+ '@types/[email protected]':
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
resolution: {integrity: sha512-GnJmSr40H3RAnj0s34FNTcJi1hmWFV5KXugE0mYWnYhgTAHLJ/dJKAwDmvPJYMke0RplY2XE9LnM4hqSqKIjhQ==}
@@ -2656,6 +2662,9 @@ packages:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
+ resolution: {integrity: sha512-2jBxDJY4RR06tQNy4w5FlFH7kfxsQZlufd0sbv+chfHCxeJwrFw2baUDsSwvBISD4K4RDbd0PTfy3uNXsR6siA==}
+
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
@@ -6386,6 +6395,9 @@ snapshots:
'@types/[email protected]': {}
+ '@types/[email protected]':
+ optional: true
+
dependencies:
'@types/node': 17.0.45
@@ -6894,6 +6906,10 @@ snapshots:
dependencies:
domelementtype: 2.3.0
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
+
dependencies:
dom-serializer: 2.0.0