質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

2回答

382閲覧

Webアプリにおけるトークンの安全な管理

EMMMY

総合スコア17

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

1クリップ

投稿2023/09/24 12:41

編集2023/09/25 11:25

実現したいこと

  • Webアプリにおいて、外部サービスのAPIに用いるトークンを安全に保管する

前提

現在、Node.js + Express + MySQL(Sequelizeを使用)でWebアプリを作成しています。
また、環境はパブリッククラウド(Azure)となります。
Webアプリの処理の中で、外部のサービスから情報を取ってくるため、そのサービスのAPIを叩くのですが、このトークンの悪用を防止したいです。

発生している問題・エラーメッセージ

該当のソースコード

試したこと

DBに保存する、ファイルに書き込んで保存するの2つを検討しましたが、いずれも不正アクセスで読み取られた場合どうしようもない、という結論になりました。
パスワードであれば暗号化して保存してしまえば良いのですが、トークンの場合は使用する際復号する必要があるためです。

Web開発自体初めてでして、情報が足りていない等ありましたらお手数ですがご指摘いただけると幸いです。
みなさんの知恵をお貸しください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

1

ご参考: https://architecting.hateblo.jp/entry/2020/08/11/094135

上記に書いてないところとしては、外部サービスAPI側でIPアドレス制限をかける (対応しているなら) というのもあります。

投稿2023/09/25 11:56

68user

総合スコア2005

EMMMY👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EMMMY

2023/09/25 15:06

リンク先、大変参考になります。ありがとうございます!
guest

1

ベストアンサー

こんにちは。

秘密情報なので、一般的にはサーバ上の設定ファイルや環境変数に保管されると思いますが、DB に入れてももちろん構わないです。
Azure なら Key Vault など専用の秘密情報保管サービスに入れるというのもあります。
「不正アクセスで読み取られた場合どうしようもない」というのは、不正アクセスされた時点で避けようがないので、大人しく被害を受けるしかありません。
「(ユーザの) パスワードを暗号化 (正確にはハッシュ化、不可逆な変換) して保存する」というセオリーは、不正アクセスされた場合に「ユーザにまで被害範囲を広げない」ための対策なので、自身の被害を軽減するものではないのです。

小手先の対策にしかなりませんが、アクセストークンに可逆な暗号化を施しておいて、その暗号鍵を別の場所に分けて保管しておくことで、いずれか一箇所が不正アクセスを受けただけでは流出しないようにできるため、リスクを多少軽減することはできると思います。
それでも大元のサーバに侵入されたら無意味なので、結局は不正アクセスへのセキュリティをしっかりやることが大切です。

投稿2023/09/25 05:33

tamoto

総合スコア4103

EMMMY👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EMMMY

2023/09/25 11:30

回答いただきありがとうございます! セオリーも考え方も何一つ分かっていない状態でしたので、様々な面からコメントをいただけて大変勉強になりました。 そもそも不正アクセスへのセキュリティ対策をしっかりと行い、不正アクセスを受けること自体を避けるというのはその通りですね…根本から変な考え方をしていました。 いただいたコメントを基に改めて考えます。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。