MENU

機密データを環境変数として管理する方法

目次

はじめに

SQLの接続情報等の機密データをソースコードに直接記述すると下記のデメリット がある。

  • ソースを見られたら機密データが漏洩する
  • 環境によって値を変更することができない

これらを解決するため、composerの活用し環境変数で管理する

Composerとは?

PHPのライブラリ依存管理ツール

例)Aライブラリを使うためには、先にBライブラリをインストールしなければいけない。これを依存関係という。

Composerはこのような依存しているライブラリをまとめてインストールしてくれる。

変数と環境変数

変数とは?

  • 値を格納しておくために定義する箱のようなもの、PHPのコード内でのみ使用できる

環境変数とは?

  • OSに格納される変数
  • PHPに記述しないので変数の中身がバレない、環境によって切り替えられる

環境変数を使うには?

phpdotenvを使うと容易に設定ができる

これにより.envファイルを環境変数として定義することができる

設定手順

環境変数を設定する

phpdotenvのインストールにはcomposerが必要なため、先にこちらから準備する

  • ターミナルで下記コマンドを実行してcomposerを初期化する
    (composerを設定したいディレクトリに移動して実行)
$ composer init
  • 初期設定にあたり下記の画面がでるが、とりあえずエンターキー連打で進める
    (一部入力が必要な箇所あり)
Package name (<vendor>/<name>) [root/html]:
Description []:
Author [, n to skip] :  ←ここだけ「n」と入力
Minimum Stability []:  
Package Type (e.g. library, project, metapackage, composer-plugin) []:  
License []:  

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]?
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package:

{
    "name" : "root/html",
    "require": {}
}

Do you confirm generation [yes]?
  • ここまで進めると指定ディレクトリにcomposer.jsonが生成される
  • ファイルを開くと初期状態は下記の記述となっている
{
    "name": "root/html",
    "require": {}
}
  • ファイルの生成が確認できたら下記のコマンドを実行してphpdotenvをインストールする
$ composer require vlucas/phpdotenv
  • 完了すると、composer.jsonにphpdotenvが追加され、composer.lockファイルが生成される
  • インストールされたphpdotenvの格納先ディレクトリ
/vendor/vlucas/phpdotenv/
  • プロジェクトのルートディレクトリに「.env」ファイルを新規作成
    当該ファイル内に環境変数を定義する
DB_HOST=$host
DB_USERNAME=$username
DB_PASSWORD=$passwd
DB_DATABASE=$dbname
//変数内には任意の文字列を設定する
  • 以上で環境変数を設定することができた

環境変数をアプリケーションに呼び出す

環境変数を呼び出したいphpファイルに対して以下の手順を実施する

  • ライブラリを読み込むためにオートロードの設定をする
require __DIR__ . '/vendor/autoload.php';
  • 環境変数を読み込む設定をする
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
  • 環境変数を読み込んで変数に格納する
$dbHost = $_ENV['DB_HOST'];
$dbUsername = $_ENV['DB_USERNAME'];
$dbPassword = $_ENV['DB_PASSWORD'];
$dbDatabase = $_ENV['DB_DATABASE'];
  • MySQLの接続情報を設定する
    ※手続型の接続情報
$link = mysqli_connect($dbHost, $dbUsername, $dbPassword, $dbDatabase);

以上の設定で、機密データを別ファイルで管理することができる

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次
閉じる