ホスティングサービスがトークンを暗号化して保存し、貼り付けたあとに二度と表示せず、Developer Portalでトークンをリセットすればすぐにアクセスを遮断できる限り、Discordのボットトークンをホスティングサービスに渡しても安全です。 そのリセットこそが本当の安全策です。ホストを無条件に信用するよりも重要です。誰がトークンを持っていても機能するからです。
ボットのトークンで実際に何ができるのか
トークンは、コードがボットとしてログインし、APIのリクエストを認証するための鍵です。トークンを持っている人は、メッセージを投稿し、ボットが見られるものを読み取り、すでに参加している各サーバーでボットの権限が許す操作をすべて行えます。一方で、トークンではボットを新しいサーバーに追加することはできません。それには別途、OAuth2の招待リンクと、サーバー管理者の承認が必要です。トークンが漏えいしたり悪用されたりするのは、ボットがすでに参加しているサーバーでは実際に問題になります。ただし、あなたのDiscord全体に対するマスターキーではありません。
本当のリスクは渡すことではなく、その後の保管方法
ホスティング事業者のダッシュボードの入力欄に、HTTPSでトークンを貼り付けることは、どのログインフォームにパスワードを入力することとも、大きな違いはありません。本当に重要なリスクは、その後にトークンがどう扱われるかです。バグや不注意な社員が読み取れる場所に平文で保存されていないか、ログに出力されていないか、サポートスタッフが呼び出して内容を見られないか。これらは保管と取り扱いの問題であり、共有するという行為そのものの問題ではありません。
信頼できるホストがすべきこと
- 保存時に暗号化する。 読み取り権限を持つ誰もがコピーできるデータベースの列に、平文で保存しないこと。
- 一度保存したあとは、二度と表示しない。 パスワードの入力欄が、入力した内容を表示しないのと同じです。
- HTTPSでのみ受け付ける。 ホストが提供する自分のダッシュボードでのみ受け付け、DMやメールでは決して受け付けないこと。
- 自分でいつでもリセットまたは削除できるようにする。 サポートに頼まなくても済むこと。
- ボットを削除するかアカウントを閉じたときに、実際にデータベースから削除する。 使わなくなるだけでは不十分です。
本当の緊急停止スイッチ: トークンのリセット
この部分はDiscordに共通する仕組みであり、個々のホストが管理しているものではありません。Developer Portalで「Reset Token」を押すと、古いトークンは、それが使われていたすべての場所で即座に無効になります。自分のコード、ホスティング事業者、または許可なくトークンを入手した人は、次に再接続しようとしたときに切断され、古い値ではログインし直せなくなります。そのため、信頼できるホストにトークンを渡すリスクは、感覚的に思われるほど大きくありません。実際には、閉じ込められることはなく、いつでも、どんな理由でも、数秒でアクセスを終わらせられるからです。
一例として、Noxyrの場合
Noxyrのカスタムボットの機能では、あなたのボットの名前で機能一式を動かすためにトークンを受け取ります。トークンは暗号化して保存され、復号できるのはウェブサイトと、あなたのボットを動かしている特定のホストノードだけです。貼り付けたあとは、あなたにも、ほかの誰にも表示されることはありません。最初にトークンを貼り付けた人だけが差し替えられます。同じサーバーのほかの管理者はボットの状態を見られますが、あなたの名前で別のボットに差し替えることはできません。カスタムボットを削除すると、保存されたトークンも完全に消去されます。やめたくなった場合は、Developer Portalでトークンをリセットすれば、ほかのホストの場合と同じように、その瞬間に接続が切れます。
ホストが閉鎖されたり、侵害されたりしたら?
すべてを正しく行っているホストでも、いつかは最悪の日を迎えることがあります。サーバーが侵害されたり、会社が予告なしに閉鎖されたりします。自発的に離れられるようにするのと同じリセットが、ここでもあなたを守ります。ホストのデータベースが漏えいした可能性があると少しでも疑われたら、彼らの事後報告を待つ前にトークンをリセットしてください。暗号化されたトークンが漏えいしても、その後数分で無効にできれば、ローテーションされないトークンが同じように漏えいした場合よりも、ずっと小さな事故で済みます。
関わらないほうがよい警告サイン
- 適切なダッシュボードの入力フォームではなく、DiscordのDMやサポートのチャットでトークンを貼り付けるよう求める。
- 自分でリセット、差し替え、削除できる方法を用意していない。
- 貼り付けフォームを、HTTPSではなく平文のHTTPで提供している。
- 保存されたトークンを、チームのほかの誰が見られるかについて曖昧にしている。
- ボットのトークンの代わりに、またはそれに加えて、あなた個人のDiscordアカウントのパスワードを求める。正当なホスティングサービスがそれを必要とすることは決してありません。
よくある質問
ホストが私のボットのサーバーを乗っ取ることはできますか? いいえ。トークンでボットを新しい場所に招待することはできません。それには常に、別のOAuth2のフローと、管理者が「認証」をクリックする必要があります。
ホストを使ったあとで、ボットを取り戻せますか? はい、できます。Developer Portalでトークンをリセットすれば、ホストのアクセスは即座に終わります。事前に何かを削除してもらう必要はありません。
Discordアカウントの2段階認証は、トークンを守ってくれますか? いいえ、ボットのトークンはログインとは別の認証情報だからです。ここで本当に意味があるのは、リセットという手段だけです。
セルフホストは、ホストを使うよりも本質的に安全ですか? 自動的にそうなるわけではありません。自分のサーバーから漏えいしたトークンは、ホストのデータベースから漏えいしたものと同じくらい危険です。安全性は、誰がプロセスを動かしているかではなく、暗号化と取り扱いによって決まります。
トークンがすでに漏えいしたかもしれないと思ったら、どうすればよいですか? ほかのことを調べる前に、すぐにリセットしてください。どこで入手されたものであっても、それを持っている人を最も速く遮断できる方法です。
トークンの生成とリセットの方法は、Discordボットのトークンガイドの全体をご覧ください。Noxyrのセットアップの仕組みの詳細は、カスタムボットのドキュメントをご覧ください。