0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クライアントサイドからの環境変数へのアクセスを制限する

Last updated at Posted at 2025-01-31

viviON グループでは、DLsite や comipo など、二次元コンテンツを世の中に届けるためのサービスを運営しています。
ともに働く仲間を募集していますので、興味のある方はこちらまで。

概要

クライアントサイドからの環境変数へのアクセスを制限してセキュリティを強化する。

環境

FW:Nuxt3
言語:Typescript

実現方法

環境変数の設定時にpublicとprivateを使い分けることで実現します。
Nuxt3 では以下の 2 パターンで環境変数を設定することができます。

  • public:クライアントサイド、サーバーサイドどちらからでの参照可能な環境変数
  • private:サーバーサイドのみ参照可能な環境変数

機密情報を含む環境変数を定義をしたい場合には、privateを利用してクライアントサイドから取得できないようにします。

privateに設定した環境変数はクライアントサイドから参照しようとしても値が取れないので、publicからprivateに変更する場合は影響範囲を確認しましょう!

使い分けるメリット

  • セキュリティの強化
  • クライアントサイドとサーバーサイドの役割分担
  • クライアントに送るデータが減るのでパフォーマンス向上(大きな向上は見込めません)

環境変数使い分けの例

publicの例

  • APIのエンドポイント
  • アプリケーション名やバージョン

privateの例

  • APIの秘密鍵
  • データベース接続情報
  • 外部サービスのシークレットキー

実装

  • 環境変数の設定(nuxt.config.ts)
export default defineNuxtConfig({
  runtimeConfig: {
    // private
    apiSecret: process.env.API_SECRET,

    // public
    public: {
      apiBase: process.env.API_BASE,
    }
  }
})
  • 環境変数の参照
const runtimeConfig = useRuntimeConfig()
console.log(runtimeConfig)

サーバーサイドからの参照
 public/privateともに参照可能
サーバーサイド.png

クライアントサイドからの参照
 publicのみ参照可能(privateへのアクセスはundefinedになります)
クライアントサイド.png

環境変数の命名規則

ここまでの対応とともに、命名規則を統一することでよりセキュリティやメンテナンス性を高めることに繋げることもできます。

(例)
NUXT_PUBLIC_ を public 用の環境変数の接頭辞として利用
PRIVATE_ を private 用の環境変数の接頭辞として利用

まとめ

実装は簡単なので、環境変数で定義したい値をどう管理するかを決められればセキュリティ強化可能です。
環境変数は機密性の高い情報を含むことも多いので、アプリケーションに合わせて丁寧に管理しましょう。

Appendix

公式ドキュメント

一緒に二次元業界を盛り上げていきませんか?

株式会社 viviON では、フロントエンドエンジニアを募集しています。

また、フロントエンドエンジニアに限らず、バックエンド・SRE・スマホアプリなど様々なエンジニア職を募集していますので、ぜひ採用情報をご覧ください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?