Astroでreact2shellのような脆弱性が起きない理由
Astroでreact2shellのような脆弱性が起きない理由
⚠️ React2Shell の原因
1. React Flight プロトコルのバグ
constructor.constructor による eval、Thenable の悪用、プロトタイプ汚染など
2. ユーザー入力を過信
受け取ったデータ構造を十分に検証せず処理してしまった
📉 RSFの弱点
独自プロトコルによるバグの温床
ユーザー入力検証不足
クライアントとサーバーの境界が曖昧(use server ディレクティブによる混乱)
🌟 Astroのアプローチ
Astro Server Actionsを採用
サーバー側処理を src/actions に集約
入力は Zodスキーマで必ず検証
通信はJSONベースのREST API形式でシンプル
出力には devalue を使用するが、入力には使わず安全性を確保
SvelteKitも使用しているライブラリ
✅ RSCとの比較
RSC: 複雑な独自プロトコル → 脆弱性発生。
Astro: JSON + Zod による明快な設計 → 安全性・可読性が高い。
RSFは「魔法のようなRPC」、Astroは「ボイラープレート削減のRPC」。
📌 結論
react2shellは「入力信頼」と「境界設計の弱さ」が原因。
Astroは シンプルなフォーマット・強制的なスキーマ検証・コード分離 によって同じ課題を安全に解決している。