Skip to content

Javadoc由来のmermaidブロックがsecurityLevel looseで描画される(XSS残課題) #1142

Description

@irof

事象

#1115 の対応で Javadoc 由来 Markdown は DOMPurify でサニタイズされるようになったが、Javadoc の ```mermaid コードブロック(renderMarkdownDiagrams)は解析対象コード由来のソースがそのまま `securityLevel: "loose"` の mermaid で描画される。loose では mermaid の `sanitizeText` がスキップされるため、ラベルに HTML を埋め込む形の XSS 経路が残っている。

strict に戻せない理由(#1115 での検証結果)

mermaid 11.12.0 の実装では、click の関数コールバック(click <id> <handlerName> 形式)は securityLevel === "loose" でのみ有効(minified コード中の securityLevel!=="loose"||...return)。package図の階層図・探索図のノードクリックがこれに依存しているため、全体を strict/antiscript にするとナビゲーションが壊れる。

該当定数: jig-core/src/main/resources/templates/assets/jig-mermaid.jsMERMAID_SECURITY_LEVEL

対応案

  • click の関数コールバックをやめ、描画後の SVG に addEventListener でバインドする方式へ移行し、securityLevel を antiscript(HTML 可・script 除去・click 有効な href は維持)または strict に下げる
  • もしくは Javadoc 由来ダイアグラムのみ描画設定を分離する(mermaid の initialize がグローバルなため、遅延レンダリングキューとの競合に注意)

あわせて検討(#1115 の修正案より)

CDN 依存(dompurify / marked / mermaid)のアセット同梱。オフライン環境対応と供給網リスク低減になる。


🤖 この issue は Claude Code による #1115 対応のフォローアップとして作成されました。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugうまく動かない

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions