はじめに
PHP での簡単な WEB開発自体は経験がありましたが、PHP のフレームワーク Laravel は現在学習開始したばかりの超初心者です。セキュリティ対策に関する基本的かつ大切な知識を得たので自分のために備忘録をまとめておきます。
環境変数 とは
環境変数とは、プログラム本体には書かず、実行環境ごとに個別に設定しておける値のことです。
例えば、以下のような場面で使われます
- データベースの接続情報(パスワード等)
- APIキー
- アプリケーションの実行モード(開発用 or 本番用)
- 外部サービスの認証情報 etc...
環境変数を使うメリット
-
プログラムの書き換えが不要になり再利用性が高くなる
→ 開発用・本番用など環境が違っても、コードを変えずに済む!
→ 同じコードでも、設定だけ変えれば別環境で使える。 -
セキュリティ的に安全
→ 秘密情報を外部に見えるコードに書かなくて済むから
★ Laravel において環境変数の定義は .env ファイルに書いていきます。
.env の記述例(Laravelの場合)
#
以降はコメントです。
# アプリケーションの基本設定
APP_NAME=MyApp # アプリの名前(自由に設定可)
APP_ENV=local # 環境名(local, production, etc)
APP_KEY=base64:XXXXXXXXXXXXXXXXXXXX # 暗号化用キー(自動生成される)
# データベース接続設定
DB_CONNECTION=mysql # 使用するDBドライバ(mysql, pgsqlなど)
DB_HOST=127.0.0.1 # DBサーバーのホスト名
DB_PORT=3306 # DBのポート番号(MySQLのデフォルト)
DB_DATABASE=myapp # 接続先のデータベース名
DB_USERNAME=root # DBのユーザー名
DB_PASSWORD=secret # DBのパスワード
(色分けされていない状態ではじめて見たときはイコール前後に半角空白入れたほうが見やすいのにな~って思っていました)
※ 余計に空白を入れるのはNGです。=
の前後に余計な空白があると予期せぬ動作に繋がります。=
以降に書かれているものをそのまま文字列として受け取る ということです。
結局なぜ .env を Git管理 から外すの?
ところで、.env
記述例のコメントを見ていると何やら 暗号化キー や パスワード などの記述が目に入りますね。
そうです、Laravelにおいて".env" ファイルを Git管理 から外すのは
「APIキーやデータベースのパスワードなどの秘密情報を含んでいるから」 です。
これをGitで管理すると、誤って公開リポジトリにUPしたことで大切な情報を外部に公開してしまうなど 重大なセキュリティインシデントが発生するリスク があるため、通常はGit管理から外す必要があります。
.env を Git管理 から外す方法
.gitignore
に.env
ファイルを追加すれば、
Gitに「このファイルは管理しないでね!」と伝えるための設定 ができます。
やり方は、プロジェクトのルートフォルダ(いちばん上のフォルダ)にある
.gitignore
という名前のファイルをテキストエディタで開き、以下の短い1行を追加するだけです。
.env
おわりに
短い記事でしたが書くのが久しぶりでちょっと疲れました。
大事なことなので開発時(※グループ開発時は特に)意識しておきます。