apiKeyはクライアント側に存在します。プロバイダーはアプリの読み込み時にこれをウォレットブートストラップ(/waas/config)に送信します。これはクライアント側SDKでは想定されていることです。このページでは、このキーが何をできるか、何をできないか、そしてどのように制限するかを詳しく説明します。
キーができること — そしてできないこと
ここから始めましょう。これは誤りやすい部分です:Helius APIキーはRPC/クレジットの資格情報であり、ウォレットキーではありません。 漏洩したキーができないこと:- トランザクションまたはメッセージの署名、
- 資金の移動やアクセス、
- ユーザーの埋め込みウォレットに触れること。
公開しても請求を回避できるわけではありません。 WaaS署名は埋め込みウォレットが署名する瞬間に計測され、APIキー階層では計測されません。漏洩したキーは無料の署名を発行したり他人のサイトから署名を請求したりすることはできません。計測はキーの秘密性に依存しません。
ロックする
これらのレイヤーは最も少ない労力から最も厳しい境界までをカバーします。最初のものは必須のベースラインです。残りはリスク許容度に応じて追加します。1. キーをドメインで制限する(必須)
アプリが実行されるオリジンにキーを制限し、バンドルからキーを取得されても他では使えないようにします。1
RPCアクセス制御を開く
ダッシュボードで、RPCsセクションのキーを開き、アクセス制御を開きます。
2
許可されたドメインにドメインを追加
アプリが提供されるすべてのオリジンを追加します—本番、ステージング、プレビュー:
3
環境ごとに別々のキーを使用
ローカル、ステージング、本番用に別々のキーを保管し、一つを回転させても他を停止させないようにします。
ドメインの許可リストは、決意のあるスクリプトによる悪用を防ぐものではありません。 チェックはリクエストの
Origin/Refererヘッダーを読み取ります— ブラウザは正直にこれを設定しますが、非ブラウザクライアント(例:curl -H "Origin: yourdapp.com")はこれを偽造できます。これはすべてのクライアント側APIキーに共通の問題であり、Heliusだけではありません。ドメイン制限は、他のサイトでキーが表示されるという一般的なケースを信頼性高く防ぎますが、偽造できない境界が必要な場合は、IP/CIDRに固定されたサーバー側キーを使用します(ステップ4)。2. キーレスSecure RPC URL(自動)
RPCトラフィックはキーを全く含みません。SDKはプロジェクトのキーレスSecure RPC URLをブートストラップ時に解決し、自動でconnectionコールに使用します — 設定する必要はありません。
これらのURLにはキーが含まれていないため、RPCリクエストから抽出するものはなく、1秒間に5リクエストまでのレート制限がIPごとにかけられています—したがって、保護はオリジンチェックに依存しません。(有料プランで利用可能です。プロジェクトにSecure RPC URLがない場合、RPCは同一オリジンのルートハンドラにフォールバックします)。
3. キーをサーバーサイドに移動する—サーバーレス
キーをブラウザから伏せておくには、RPC、送信、トランザクション履歴コールを自身のエンドポイント経由でキーをサーバーサイドのシークレットから注入するようにします。これによって、Sender-optimized landingやトランザクション履歴に参加できます。 どちらのオプションも100%サーバーレスです—実行するサーバーはありません:-
Next.jsルートハンドラ—サーバーレス関数としてデプロイします(Vercel, Netlify, Cloudflare)。サーバー環境から
HELIUS_API_KEYを読み込みます。app/api/helius/[...path]/route.ts -
Cloudflare Workerプロキシ—最もクリーンな完全サーバーレスのオプションです。キーはワーカーシークレットに保管され、ブラウザには届きません。
Helius RPC Proxy
ワンクリックでCloudflareにデプロイできるオープンソースのRPCプロキシ。
4. 偽造できないIP/CIDR境界を追加
攻撃者が偽造できない境界のために、サーバーサイドキーをバックエンドのIPアドレスまたはCIDR範囲にロックします。Originヘッダーとは異なり、通常の接続を介したリクエストの送信元IPは偽造できません—したがって、サーバー以外からのcurlは即座に拒否されます。
これはサーバーサイドキーにのみ適用されます — ブラウザキーをIPで制限することはできません。ユーザーは予測不能なIPから接続するためです。クリーンなパターンは2つのキーです:
サーバーレス関数は動的なイーグレスIPを持つため、CIDRを固定するには安定したイーグレスが必要です—専用のイーグレスIPを持つCloudflare Worker、Vercel Secure Compute、または固定IP NATを前面に置くことが必要です。このようなものがない場合でも主なメリットは得られます(キーはサーバー側であり、ブラウザには届きません)。上にIP境界を追加しないだけです。
レイヤーの比較
どのレイヤーを選んだとしても、ユーザーのウォレットキーとは無関係です—それらは決して巻き込まれません。
ウォレットブートストラップ
ルートハンドラ(本番)セットアップでは、ウォレットブートストラップ(
/waas/config)もサーバーサイドキーを使用してルートハンドラを通過します—したがって、Heliusキーはブラウザには配信されません。プロトタイピングセットアップでは、ブラウザがブートストラップのキーを送信します。ドメイン制限(ステップ1)を行います。いずれの場合もそれはRPCに特化したキーであり、ウォレットや資金に触れることはできません。チェックリスト
出荷前:- クライアントキーは正確なオリジンにドメイン制限されている
- ローカル/ステージング/本番用に別々のキーを持つ
- キーは環境変数から読み取られ、ハードコーディングされない
- (オプション)RPC、送信、履歴はサーバーレスのルートハンドラまたはCloudflare Worker経由
- (オプション)サーバーサイドキーが偽造不可能な境界でIP/CIDRにロックされている
次のステップ
キーを保護する
フルアクセス制御リファレンス:ドメイン、IP、CIDR、プロキシ。
設定
プロバイダーの設定とダッシュボードのサインインメソッド。