Bagaimana saya bisa mendapatkan variabel lingkungan di php?

Setiap aplikasi web menengah hingga besar harus berurusan dengan informasi sensitif. Contoh jenis informasi ini adalah kredensial untuk mengakses database dan kunci API pihak ketiga

Jika data ini tidak dienkripsi saat istirahat, penyerang mungkin mendapatkan akses ke sana dan menggunakannya untuk tujuan jahat

Ketika Anda pertama kali memulai, sangat umum untuk menemukan informasi ini disimpan langsung ke dalam kode di mana nilainya digunakan (a. k. a. hardcoded) dan sementara ini berhasil, dengan cepat menjadi jelas bahwa itu bukan praktik yang baik untuk jangka panjang karena membuat perubahan kecil berarti melalui ratusan atau bahkan ribuan baris kode

Langkah evolusi berikutnya adalah mengambil nilai-nilai ini dan secara dinamis menghasilkan file konfigurasi selama penerapan (mis. g. Tindakan GitHub)

return [
      'db_host' => 'localhost',
      'db_user' => 'app_user',
      'db_pass' => 'thaeD3gohdu2'
];

Atau beberapa format lain yang lebih rumit seperti YAML, XML, atau INI

Keuntungan menggunakan file eksternal adalah kenyataan bahwa ketika perubahan diperlukan ada file terkenal (dan tunggal. ) lokasi untuk membuat perubahan tersebut dan semuanya tetap berfungsi seperti yang diharapkan

Tapi masalahnya adalah di mana menyimpan rahasia ini?

Konfigurasi Aplikasi PHP Menggunakan Variabel Lingkungan

Salah satu cara yang sangat baik untuk mengatasi masalah ini adalah mengonfigurasi aplikasi menggunakan variabel lingkungan saat itu, tidak ada nilai konfigurasi aplikasi yang ada di basis kode

Satu catatan penting. mekanisme ini sama sekali tidak eksklusif untuk PHP dan sama bergunanya jika Anda bekerja dengan Nodejs, Python, atau hampir semua bahasa pemrograman lainnya

Jika Anda menggunakan variabel lingkungan dalam aplikasi PHP CLI, Anda dapat memanggilnya menggunakan perintah seperti

export MY_VAR=value
php myscript.php
_

Dan nilai ini akan tersedia untuk skrip Anda melalui fungsi fungsi getenv, seperti ini

echo getenv('MY_VAR');

Ada cara lain untuk melakukannya, menggunakan superglobal

echo getenv('MY_VAR');
3, seperti ini

echo $_ENV['MY_VAR'];
_

Saya sarankan hanya menggunakan

echo getenv('MY_VAR');
_4 karena untuk menggunakan
echo getenv('MY_VAR');
3 superglobal, file
echo getenv('MY_VAR');
6 Anda memerlukan nilai untuk memulai dengan huruf "E" yang mungkin tidak selalu demikian

Mengatur variabel lingkungan untuk aplikasi CLI itu sederhana, tetapi bagaimana dengan lingkungan web di mana proses PHP dihasilkan oleh server aplikasi seperti NGINX atau Apache?

Server aplikasi (untuk alasan keamanan yang baik) tidak memaparkan variabel lingkungan tingkat sistem ke proses PHP, jadi Anda memerlukan pendekatan yang berbeda

Mari kita lihat bagaimana Anda dapat menyetel variabel lingkungan untuk server web paling populer. Apache dan NGINX dan kami akan menggunakan Docker sehingga Anda dapat dengan mudah mengikuti contoh berikut

Cara Mengatur Variabel Lingkungan untuk Aplikasi PHP di Apache

Apache menggunakan modul mod_env untuk mendefinisikan variabel lingkungan menggunakan direktif SetEnv

Cara terbaik untuk melakukan ini untuk PHP di Apache adalah dengan membuat file konfigurasi Apache terpisah untuk menentukan nilainya

Menggunakan Debian dan Ubuntu sebagai contoh, file konfigurasi yang berisi variabel lingkungan harus disimpan di direktori /etc/apache2/conf-available

Dalam kasus kami, kami akan menyebutnya apache-env-vars. conf, menggunakan direktif SetEnv untuk mendefinisikan setiap variabel lingkungan

SetEnv MY_VAR "MY_VALUE"
_

Setelah melakukan ini, konfigurasi harus diaktifkan agar Apache dapat memuatnya saat memulai, tetapi cara ini dilakukan tergantung di mana Anda menjalankan Apache

Jika menggunakan Mesin Virtual yang menjalankan Debian atau Ubuntu, Anda harus membuat file conf di

echo getenv('MY_VAR');
7, lalu jalankan
echo getenv('MY_VAR');
8 agar dapat dimuat saat startup

Jika Apache sudah berjalan saat file ini dibuat, maka harus me-restart Apache dengan menjalankan sudo service apache2 restart agar variabel lingkungan di file conf dapat dimuat

Menggunakan Docker dan gambar

echo getenv('MY_VAR');
9 serupa kecuali file conf perlu dibuat di direktori
echo $_ENV['MY_VAR'];
0, kemudian jalankan a2enconf env-vars sebagai bagian dari perintah start kontainer

Cara Mengatur Variabel Lingkungan untuk Aplikasi PHP di NGINX

Ketika datang ke NGINX, strategi serupa harus diterapkan, perbedaan utamanya adalah bahwa NGINX tidak menelurkan proses PHP secara langsung, karena hanya mem-proxy permintaan ke PHP-FPM. Ini berarti variabel lingkungan harus ditentukan dalam file konfigurasi PHP-FPM, biasanya disimpan di

echo $_ENV['MY_VAR'];
1

Menetapkan variabel lingkungan untuk PHP-FPM menggunakan sintaks berikut (jangan mengutip nilai)

env[MY_SECRET] = 123
env[OTHER_SECRET] = abc

Jadi, untuk menyimpan variabel lingkungan Anda di NGINX dan PHP-FPM, sebaiknya buat file baru di

echo $_ENV['MY_VAR'];
2 dan masukkan definisi di dalamnya

Sama seperti dalam kasus Apache, masuk akal untuk membuat file ini saat menjalankan penampung

Bagaimana Seharusnya Variabel Lingkungan Diisi?

Variabel lingkungan adalah solusi terbaik untuk menyediakan aplikasi PHP Anda dengan rahasia dan data konfigurasi, tetapi di mana harus disimpan?

Satu masalah dengan menyimpan nilai variabel lingkungan di server web atau file konfigurasi sistem operasi adalah kenyataan bahwa mereka tinggal di luar proyek Anda, yang meningkatkan kompleksitas penerapan kode Anda di beberapa lokasi

Adalah. env File Jawabannya?

Sebuah. env adalah file teks biasa yang berisi definisi variabel lingkungan yang dirancang agar aplikasi PHP Anda akan menguraikannya, melewati Apache, NGINX dan PHP-FPM

Penggunaan dari. env populer di banyak kerangka kerja PHP seperti Laravel yang memiliki dukungan bawaan untuk parsing. env, atau menggunakan

echo $_ENV['MY_VAR'];
_3library

Menggunakan. env di PHP itu sederhana, yang diperlukan hanyalah mekanisme untuk membaca file, mengurai isinya, dan mengisi lingkungan, bukan?

Sehat. sebenarnya ada beberapa masalah lain yang perlu diperhatikan seperti validasi dan pengecekan keberadaan nilai yang dibutuhkan

Seperti biasa, mengapa mengalami semua masalah ini ketika orang lain telah melakukannya untuk Anda, bukan?

Untuk menambahkan paket ini ke aplikasi Anda, jalankan composer require vlucas/dotenv kemudian minta file autoload yang terletak di direktori vendor Anda seperti ini

require_once 'vendor/autoload.php';

Dan Anda akan siap menggunakan perpustakaan seperti ini

$dotenv = Dotenv\Dotenv::createUnsafeImmutable(DIR);
$dotenv->load();

Setelah itu, Anda cukup mengakses nilai yang disimpan di. env menggunakan

echo getenv('MY_VAR');
_4

Dimana Harus Isi. env File Disimpan?

Jelas, sejak. env menyimpan data yang berpotensi sensitif, file tersebut tidak boleh disimpan di webroot yang dapat diakses publik karena NGINX dan Apache melihatnya sebagai file teks dan tidak tahu bahwa file tersebut harus dilindungi secara default. Dan mereka pasti tidak boleh berkomitmen untuk repositori kode sumber Anda

Biasanya, mereka disimpan di direktori root aplikasi Anda

Cara Menggunakan. env File untuk Aplikasi Laravel

Laravel menggunakan. env sebagai bagian dari konfigurasinya dan secara otomatis digabungkan dalam paket vlucas/dotenv. Faktanya, saat Anda membuat proyek baru sebagai sampel. env dibuat untuk Anda

Satu perbedaan yang dapat Anda temukan saat bekerja dengannya. env dalam proyek Laravel sebagai lawan dari yang non-Laravel adalah adanya pembantu yang disebut env yang dapat digunakan untuk mengakses nilai variabel lingkungan, seperti ini

$val = env('ENV_VAR');

Meskipun ada kemungkinan menggunakan parameter kedua untuk memberikan nilai default, ini tidak disarankan. Mengapa? . Oleh karena itu jauh lebih baik untuk mendefinisikan segala sesuatu di. env jadi hanya ada satu tempat untuk melihat bagaimana aplikasi dikonfigurasi

Bagaimana menyediakan rahasia sebagai variabel lingkungan ke aplikasi PHP melalui. env menggunakan Docker

Nilai yang tersimpan di dalamnya. env dapat diteruskan ke aplikasi PHP di Docker dengan beberapa cara

Meneruskan Variabel Lingkungan saat Menjalankan Container

Salah satu opsi adalah mengisi variabel lingkungan untuk penampung menggunakan opsi

echo $_ENV['MY_VAR'];
5

docker run -v $(pwd)/.env:/usr/src/app/.env -it my-app

Keterbatasan pendekatan ini adalah hanya berguna untuk aplikasi PHP CLI, karena variabel lingkungan yang ditentukan wadah (sistem) tidak akan diteruskan oleh server web karena alasan keamanan.

Meneruskan Variabel Lingkungan menggunakan Volume Mount

Cara yang lebih umum untuk menggunakan an. env adalah untuk memasangnya ke wadah buruh pelabuhan

export MY_VAR=value
php myscript.php
_0

Dari sana, aplikasi Anda dapat mengakses. env disimpan di /usr/src/app/. env di dalam wadah hanya dengan melakukan hal berikut

export MY_VAR=value
php myscript.php
_1

Tapi sebelum memutuskan itu. env adalah caranya, penting untuk memahami risiko dan kelemahan penggunaan. env untuk konfigurasi dan rahasia aplikasi

Mengapa. env File Bukan Solusi Terbaik

Ketika. env tentu saja lebih baik daripada rahasia hard-coding dalam kode sumber, mereka menciptakan serangkaian masalah baru

  • Ada kesempatan. env akan secara tidak sengaja dikomit ke repositori kode
  • sinkronisasi file env di seluruh lingkungan bisa jadi rumit
  • Ada risiko data sensitif yang tidak terenkripsi dibagikan melalui saluran yang tidak terlalu aman
  • Sintaks tidak standar di seluruh alat

Jadi. bagaimana seharusnya Anda menangani rahasia aplikasi Anda?

Menggunakan Secrets Manager untuk Aplikasi PHP

Untuk menghindari masalah ini dan lainnya, menggunakan pengelola variabel lingkungan seperti Doppler dapat membuat hidup lebih mudah

Semua variabel lingkungan untuk aplikasi Anda dapat dikelola dengan mudah melalui dasbor Doppler dan rahasia dapat diambil menggunakan CLI atau API mereka

Untuk melihat bagaimana rasanya menggunakan pengelola rahasia dengan PHP, mari kita lihat beberapa contoh menggunakan Doppler untuk mengisi rahasia ke aplikasi PHP menggunakan variabel lingkungan

Cara Memasok Rahasia sebagai Variabel Lingkungan ke Aplikasi PHP di Docker menggunakan Doppler

Gagasan umum dari contoh berikut adalah menggunakan Doppler sebagai satu-satunya sumber kebenaran dalam hal pengelolaan rahasia dan menggunakan Doppler CLI untuk mengunduh rahasia dan membuatnya tersedia untuk aplikasi Docker PHP Anda

Pada dasarnya ada dua keputusan yang harus dibuat di sini

  1. Apakah Anda ingin Doppler CLI tersedia di dalam wadah Docker Anda?
  2. Apakah Anda lebih suka menggunakan file konfigurasi server web atau. file env?

Di bagian berikut, saya akan menjelajahi opsi yang berbeda sehingga Anda dapat memilih salah satu yang paling masuk akal bagi Anda

Doppler CLI Menghasilkan File Apache Conf

Jika Anda memilih untuk mempertahankan gambar Docker apa adanya, Anda dapat menjalankan Doppler CLI di lingkungan hosting penyebaran atau wadah untuk menghasilkan file conf dan memasang di dalam wadah

Perintah persis yang Anda perlukan untuk memulai penampung bergantung pada apakah Anda memilih konfigurasi atau. file env

Kami akan menggunakan file conf Apache sebagai contoh di sini, tetapi prosesnya pada dasarnya sama, hanya berbeda secara sintaksis untuk PHP-FPM atau. env

Mount File Conf Apache Eksternal

Untuk mengunduh versi terbaru rahasia Anda ke file konfigurasi Apache, Anda harus menggunakan Doppler CLI untuk membuat file conf Apache sebelum menjalankan penampung Anda

export MY_VAR=value
php myscript.php
_2

Pasang env-vars. conf di dalam wadah

export MY_VAR=value
php myscript.php
_3

Apache kemudian akan secara otomatis membaca conf saat memulai

Jika Anda lebih suka menggunakan. env, perintah untuk mengunduh rahasia sedikit berbeda

export MY_VAR=value
php myscript.php
_4

Kemudian Anda dapat memulai wadah Anda seperti ini

export MY_VAR=value
php myscript.php
_5

Contoh ini memungkinkan Anda untuk menggunakan Doppler tanpa mengubah gambar yang sudah ada seperti

echo $_ENV['MY_VAR'];
6. Sekarang mari kita lihat pendekatan yang direkomendasikan yang menggunakan gambar Docker khusus dengan Doppler CLI yang disematkan

File Apache Conf Dihasilkan Di Dalam Kontainer

Cara lain untuk melakukannya adalah dengan memiliki Doppler CLI di dalam wadah dan membuatnya menghasilkan file conf Apache pada waktu wadah dijalankan. Manfaat dari pendekatan ini adalah yang harus Anda lakukan untuk mendapatkan versi terbaru dari rahasia Anda hanyalah memulai ulang wadah. Tidak diperlukan penerapan ulang, dan tidak ada file untuk dipasang

Menggunakan Apache sebagai contoh, kita perlu memperluas image Docker

echo getenv('MY_VAR');
9 untuk menyematkan Doppler CLI dan mengubah skrip entrypoint sehingga menghasilkan file conf Apache sebelum memulai Apache

Ini adalah contoh Dockerfile lengkap

export MY_VAR=value
php myscript.php
_6

Kode untuk custom docker-php-entrypoint akan menjadi seperti berikut

export MY_VAR=value
php myscript.php
_7

Pastikan untuk memberikan izin yang dapat dieksekusi titik masuk

export MY_VAR=value
php myscript.php
_8

Sekarang mari kita buat image Docker

export MY_VAR=value
php myscript.php
_9

Buka dasbor Doppler untuk proyek Anda, hasilkan Token Layanan, lalu ekspor di terminal Anda

echo getenv('MY_VAR');
0

Dan terakhir, jalankan wadahnya

echo getenv('MY_VAR');
1

Manajemen Rahasia untuk Contoh Kode Aplikasi PHP

Artikel ini sudah sangat panjang, tetapi saya mendorong Anda untuk memeriksa repositori sampel ini dari Doppler yang memiliki contoh konsep kerja tambahan yang telah saya tunjukkan dalam artikel ini

Berjalan di Laravel Forge?

Jika Anda mengelola penerapan dengan Laravel Forge, mengintegrasikan Doppler semudah beberapa klik agar rahasia Anda tersedia secara otomatis untuk aplikasi Anda dan diperbarui setiap saat

Ikuti saja petunjuknya di sini

Menggunakan API Doppler

Fitur bagus lainnya dari Doppler adalah API yang memungkinkan Anda membuat klien khusus, mungkin berinteraksi dengannya dari dalam aplikasi Anda

Yang harus Anda lakukan adalah mengeluarkan permintaan REST ke server Doppler, berikan token akses Anda dan Anda siap melakukannya

Berikut ini contoh menggunakan cURL

echo getenv('MY_VAR');
2

Tentu saja, Anda dapat menggunakan klien HTTP pilihan Anda, tetapi perlu diingat bahwa menekan API pada setiap permintaan akan sangat buruk bagi kinerja aplikasi Anda sehingga Anda mungkin ingin menyimpan output dari API Doppler ke konfigurasi lokal.

Jika Anda ingin tahu lebih banyak tentang API Doppler, lihat ini

Ringkasan

Pada artikel ini Anda telah mempelajari berbagai cara untuk memberikan rahasia ke aplikasi PHP Anda yang meliputi Apache, NGINX dengan PHP-FPM dan. file env. \ Jika Anda ingin mencoba Doppler, Anda dapat mendaftar untuk paket komunitas gratis

Bagaimana cara memanggil variabel lingkungan di PHP?

Anda dapat mengakses variabel ini menggunakan larik $_SERVER dan $_ENV . $site_path_var = $_SERVER["SITE_HTMLROOT"]; .

Bagaimana cara mendapatkan variabel lingkungan?

Di bilah tugas Windows, klik kanan ikon Windows dan pilih Sistem. Di jendela Pengaturan, di bawah Pengaturan Terkait, klik Pengaturan sistem lanjutan. Pada tab Tingkat Lanjut, klik Variabel Lingkungan. Klik Baru untuk membuat variabel lingkungan baru

Bagaimana cara mendapatkan data dari file env di PHP?

File lingkungan aplikasi PHP menampung sebagian besar setelan email, konfigurasi host SMTP. .
LANGKAH 1 Konfigurasikan untuk menetapkan nilai khusus di PHP. env
LANGKAH 2 Di Aplikasi. file php dibaca menggunakan metode env('').
LANGKAH 3 Gunakan config('') untuk mengambil dari aplikasi. file php

Di mana variabel lingkungan PHP disimpan?

Ini berarti variabel lingkungan harus ditentukan dalam file konfigurasi PHP-FPM, biasanya disimpan di /usr/local/etc/php-fpm. d/ . Jadi, untuk menyimpan variabel lingkungan Anda di NGINX dan PHP-FPM, ada baiknya membuat file baru di /usr/local/etc/php-fpm. d/env-vars.