fix(adapter-wp): srcset 审计精确化(parse-srcset);false 形态防御;复用 launder.naughtyHref;等价测试参数化

审查修复四项:srcset 逐候选审计改用 parse-srcset 同库实现(data: 逗号内嵌
URL 不再误切;全候选被拒/解析异常/零候选→整属性删除记账,含空 srcset);
deriveMirrorView 对 false/缺省形态 fail fast(allowedTags/allowedAttributes
的 false=库全放行语义与镜像空集解释相反,修正原注释);URL 判定复用
launder.naughtyHref(sanitize-html 2.18 同一实现路径,删手写镜像);
仪表化等价测试参数化为 15 个对抗样本(实体/控制字符/NULL/URL 注释走私、
未引号/重复属性、深嵌套、srcset 形态)。测试 204→228。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-21 11:18:39 +08:00
parent 8dd6eaf1b6
commit 7506fef875
5 changed files with 232 additions and 93 deletions
+14
View File
@@ -66,6 +66,12 @@ importers:
'@sf/contracts':
specifier: workspace:*
version: link:../contracts
launder:
specifier: ^1.7.2
version: 1.7.2
parse-srcset:
specifier: ^1.0.2
version: 1.0.2
sanitize-html:
specifier: ^2
version: 2.18.1
@@ -73,6 +79,9 @@ importers:
specifier: ^6.0.0
version: 6.0.0
devDependencies:
'@types/parse-srcset':
specifier: ^1.0.0
version: 1.0.0
'@types/sanitize-html':
specifier: ^2.16.2
version: 2.16.2
@@ -924,6 +933,9 @@ packages:
'@types/node@22.20.5':
resolution: {integrity: sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==}
'@types/parse-srcset@1.0.0':
resolution: {integrity: sha512-5ehc1s3aIQJ05ZVAmYoqDUN8zvlrIZvRUfYP+2bhGNzrY5RQBeJS9JO9jpkVm/vSOW/MkRYLArS/fhXY5cgXPg==}
'@types/sanitize-html@2.16.2':
resolution: {integrity: sha512-kuAbgDCFv418flrp3z4o/4ufLA/5ovmXRH0L419iZCPGO7w00znjeDI5Wy/KZWNIBpDQc7hucCK+J5almB6FyA==}
@@ -2279,6 +2291,8 @@ snapshots:
dependencies:
undici-types: 6.21.0
'@types/parse-srcset@1.0.0': {}
'@types/sanitize-html@2.16.2':
dependencies:
htmlparser2: 12.0.0