プロジェクト

全般

プロフィール

機能 #10512

未完了

[VEND-V2-02] URL検証・プロンプトインジェクション対策・ヒストグラム表示修正

Redmine Admin さんが12日前に追加. 12日前に更新.

ステータス:
解決
優先度:
通常
担当者:
-
開始日:
2026-07-27
期日:
進捗率:

100%

予定工数:
自動実行:
from_agent:
to_agent:
lock_required:
context_json:
session_id:
priority_custom:
start_time:
end_time:
execution_time:
acceptance_criteria:
assigned_role:
human_gate:
gate_type:
chain_root_id:
wave_id:

説明

親Epic: #10493
関連: #10507

即時対応

  1. https;//https:/https//等の誤入力を診断APIへ送らず「正しいURLを入力してください。」と表示する。クライアント・V2 API双方で検証する。
  2. 診断対象ページを未信頼データとして扱い、LLM system messageでページ内命令を無視させる。本文を明確な区切り内へ格納し、出力JSONを厳格検証する。HTML抽出・長さ制限・SSRF対策を維持する。
  3. 6観点を6頂点にした六角形レーダーチャートへ変更する。背景は7段階の同心六角形、データ面と各頂点の項目名・点数を表示する。静的資産のキャッシュ更新を強制する。

受入基準

  • https;//news.sharelab.jpはAPI行を作らず、画面に正確なエラー文を表示
  • https://news.sharelab.jp/は診断成功
  • 直接APIへ不正URLを送ると400 invalid_url
  • prompt injection文を含むfixtureでもスコアJSON契約以外を受け付けない
  • system/user message分離、untrusted content明示、max token制限
  • 全6項目に7本の棒グラフが表示される
  • 390/768/1440pxで横溢れなし
  • キャッシュ済みブラウザでも新資産へ更新
  • Node/Docker/実ブラウザ試験、Claude Code approve、Git/本番/Redmine証跡

Redmine Admin さんが12日前に更新

[要件追加]
利用者指示により、可視化は棒状のヒストグラムではなく、6観点を6頂点に配置した六角形レーダーチャートとする。

  • 6軸: 直接回答性、権威性、独自情報、構造化・意味付け、情報の鮮度、AI技術対応力
  • 0〜100点を中心〜外周へ正規化
  • 背景に7段階の同心六角形
  • データ面を塗り、各頂点に項目名と点数
  • SVGをDOM生成し、外部ライブラリを使用しない
  • role=img/aria-labelと数値一覧を併記し、色だけに依存しない
  • 390/768/1440pxで横溢れなし
  • 個別カードの点数・コメントは維持

Redmine Admin さんが12日前に更新

  • ステータス新規 から 解決 に変更
  • 進捗率0 から 100 に変更

[開発リード最終検収 2026-07-27 JST]
VERDICT: approve / Blockingなし

原因

利用者入力 https;//news.sharelab.jp が従来 https://https;//news.sharelab.jp と誤補正され、gate:not_crawlableで保存されていた。表示については利用者が期待した可視化が六角形レーダーである一方、旧実装はカード内の棒状7segmentだった。

修正

  • frontend/backendで誤スキーム、backslash、空白/制御文字、非HTTP(S)、credentials、不正hostnameを拒否
  • exact message 正しいURLを入力してください。
  • API invalidは400 invalid_url、診断/DB保存前にreturn
  • bare domainはHTTPS補完
  • LLM system/user分離、ページ本文をuntrusted JSONとしてuser messageだけに格納
  • 本文内の命令、role/output変更、秘密値要求を無視するsystem指示
  • max_tokens=160、出力2キー/number/0-100を厳格検証
  • 棒状ヒストグラムを削除し、6観点の六角形SVGレーダーへ変更
  • 背景7同心六角形、6軸、data polygon、6markers、項目名/点数、文字一覧
  • cache bust v=10512-1

コミット/本番

  • source 37e5fb0 fix(vend): validate URLs and add secure radar view
  • public 77a23de fix(vend01): publish secure hexagonal radar
  • API image sha256:847ed759d924339e85cabca86002d32d6369d1f884ebcb7da938ff3dfe271219
  • rollback image vend01-vend01-api:pre-10512

試験

  • frontend 18/18
  • backend/SSRF/DB/URL/prompt 16/16 Node20 Docker
  • Claude Code approve、Blockingなし
  • 公開API: malformed URL 400、DB count増加なし
  • 正URL https://news.sharelab.jp/ は200、診断成功
  • Chromium: malformed入力でexact error、結果非表示
  • 正URL: 総合40点、SVG1、背景polygon7、axes6、data1、markers6、labels6、文字値6、旧histogram0
  • 390/768/1440px横溢れ0
  • JS/MIMEエラー0、DB integrity ok

証跡

  • DB backup /root/backup/website-vending-machine/20260727-1000-10512
  • frontend backup /root/backup/website-vending-machine/20260727-1001-10512/frontend
  • browser /root/backup/website-vending-machine/20260727-1003-10512/browser

受入基準を満たしたため解決。次は#10513、#10514。

Redmine Admin さんが12日前に更新

進捗: 2026-07-27 JST #10512完了。URL誤入力検証をfrontend/backend双方へ追加し、https;//news.sharelab.jp正しいURLを入力してください。で即時拒否、API 400 invalid_url、DB未保存。Prompt injection対策としてsystem/user分離、未信頼本文JSON化、本文命令/role/output/secret要求無視、max_tokens160、出力2キー/number/0-100厳格検証。可視化は棒状7segmentを廃止し、6観点の六角形SVGレーダーへ変更。背景7層、6軸、data polygon、6markers、項目名/点数、文字一覧。cache bust v=10512-1。source 37e5fb0、public 77a23de、API image 847ed759。frontend18/18、backend16/16、Claude Code approve。公開API malformed 400/DB未保存、正URL診断成功。Chromium 390/768/1440でSVG1、grid7、axes6、markers6、histogram0、横溢れ0。次は#10513説明/具体コメント、#10514サイト種別・業種、#10515母集団R&D。

他の形式にエクスポート: Atom PDF