Kami akan menempatkan salah satu situs ProcessWire kami ke dalam sistem kontrol sumber berbasis Git. Repositori bersifat pribadi, tetapi saya masih ingin tidak menggunakan kata sandi. Saya telah memikirkan tentang cara menangani kata sandi basis data di /site/config. php (Saya telah membaca dokumentasi tentang mengamankan konfigurasi. file php itu sendiri). Saya telah memikirkan opsi berikut
- Tinggalkan saja konfigurasi. php apa adanya, dengan kata sandi basis data dalam teks biasa. Pastikan konfigurasi. php ditambahkan ke. file .gitignore. [Tapi saya sebenarnya ingin memiliki konfigurasi. php dalam kontrol sumber karena sangat penting untuk pengoperasian sistem. ]
- Buat file PHP di luar root web, seperti kata sandi. php, yang berisi fungsi databasePassword(). Sertakan file ini dari konfigurasi. php dan referensi fungsi. [Saya tidak suka ini karena ini menciptakan kemungkinan ketergantungan yang tidak jelas di luar direktori situs. ]
- Tetapkan kata sandi basis data dalam variabel lingkungan di file konfigurasi PHP-FPM (env[DB_PASSWD] = MyPassword). Kemudian gunakan fungsi getenv() PHP di konfigurasi. file php. [Mungkin tidak terlalu aman, dan kemudian tidak berfungsi saat API ProcessWire diakses dari skrip yang berdiri sendiri. ]
- Tetapkan kata sandi basis data dalam variabel lingkungan yang ditentukan dalam. file .bashrc. Gunakan fungsi getenv() di konfigurasi. php. [Mungkin tidak terlalu aman. ]
- Atur mysql. default_pw di php. ini [Komentar di file ini mengatakan ini adalah ide yang buruk. ]
Tak satu pun dari opsi ini yang tampaknya ideal. Apakah ada yang punya saran?
Bersulang,
Warwick
Tautkan ke komentarBerbagi di situs lain
Craig
Diposting 16 November 2021
Craig
- Anggota
- 371
- 648
- LokasiNewcastle upon Tyne, UK
- Membagikan
Diposting 16 November 2021
Inilah yang saya lakukan, yang hampir seperti (2)
situs/konfigurasi. php
<?php namespace ProcessWire; if(!defined("PROCESSWIRE")) die(); // Other PW default config values... // ... $config->dbHost = 'localhost'; $config->dbName = 'example_site'; $config->dbUser = ''; $config->dbPass = ''; $config->dbPort = '3306'; $config->dbCharset = 'utf8mb4'; $config->dbEngine = 'InnoDB'; // Environment overwrite if (file_exists(__DIR__ . '/config.local.php')) { require_once(__DIR__ . '/config.local.php'); }config. lokal. php
<?php namespace ProcessWire; $config->dbUser = 'example_site_user'; $config->dbPass = 'example_user_pass_123456';_
config. lokal. php masuk. gitignore, jadi jangan pernah berkomitmen, dan pisahkan konfigurasi. lokal. file php ada di lingkungan pengujian / langsung. (Saya menggunakan DeployHQ dan ini ditambahkan sebagai file konfigurasi yang diterapkan dengan kode lainnya)
Bagi saya, manfaat dari pendekatan ini berarti bahwa seluruh konfigurasi dapat diubah tergantung pada lingkungan, dan digunakan untuk menghidupkan atau mematikan sesuatu, seperti mode debug atau lanjutan
- 8
Tautkan ke komentarBerbagi di situs lain
FireWire
Diposting 30 November 2021
FireWire
- Anggota
- 170
- 172
- LokasiCalifornia
- Membagikan
Diposting 30 November 2021
Saya sedikit terlambat untuk permainan ini tetapi ingin membuang apa yang kami gunakan di situs PW kami. Kami menyimpan semua kredensial. env di direktori root dan kemudian dimuat menggunakan paket yang disebut phpdotenv. Itu. env dimuat dan kemudian kredensial dapat diakses saat runtime melalui $_ENV global. Beberapa detail lebih lanjut tentang pengaturan ini
- env adalah file sistem yang dilindungi secara otomatis di Apache dan tidak akan dilayani (kecuali seseorang secara aktif menimpa ini, tetapi itu akan buruk)
- File-file ini tidak ditambahkan ke repositori Git dan tidak pernah disimpan
- Kita punya. env untuk lokal, pementasan, dan produksi. Isi setiap file disimpan secara keseluruhan sebagai catatan aman di pengelola kata sandi kami
- Pustaka dotenv dimuat sekali dalam konfigurasi. php dan nilainya tersedia secara global
- Kami juga menyimpan kredensial untuk API dan layanan eksternal. Ini memungkinkan kami untuk menyimpan tidak hanya kredensial, tetapi nilai apa pun yang berbeda antara lokal/pementasan/produksi
- Kami menyimpan semua konfigurasi kami. nilai variabel php di. env sehingga konfigurasi. php adalah agnostik lingkungan dan kami selalu yakin bahwa. env adalah satu-satunya sumber kebenaran untuk seluruh konfigurasi CMS
Kami menggunakan Git untuk menerapkan ke server pementasan/produksi jadi gunakan. env memungkinkan kita untuk mendorong semua kode kita sambil mengetahui bahwa informasi dan data sensitif yang berubah antar lingkungan tidak pernah tercampur. Juga membuatnya sangat jelas bagi siapa pun yang melihat kode bahwa nilai-nilai ini disimpan dalam file dot sistem khusus
Ini paketnya, bisa diinstal dengan composer https. //github. com/vlucas/phpdotenv
Inilah yang dimaksud dengan konfigurasi. php file terlihat seperti sedang digunakan
<?php namespace ProcessWire; // Load env variables from .env in root directory $dotenv = \Dotenv\Dotenv::createImmutable(__DIR__ . '/../'); $dotenv->load(); $config->debug = filter_var($_ENV['CMS_DEBUG'], FILTER_VALIDATE_BOOLEAN); $config->usePageClasses = filter_var($_ENV['CMS_USE_PAGE_CLASSES'], FILTER_VALIDATE_BOOLEAN); $config->useFunctionsAPI = filter_var($_ENV['CMS_USE_FUNCTIONS_API'], FILTER_VALIDATE_BOOLEAN); /** * Database Configuration */ $config->dbHost = $_ENV['CMS_DB_HOST']; $config->dbName = $_ENV['CMS_DB_NAME']; $config->dbUser = $_ENV['CMS_DB_USER']; $config->dbPass = $_ENV['CMS_DB_PASS']; $config->dbPort = $_ENV['CMS_DB_PORT']; $config->dbEngine = $_ENV['CMS_DB_ENGINE']; // Etc...Semoga ini bermanfaat bagi seseorang
- 8
Tautkan ke komentarBerbagi di situs lain
monolonom
Diposting 30 November 2021
monolonom
- Anggota
- 159
- 216
- LokasiBrussel
- Membagikan
Diposting 30 November 2021
Ini adalah pengaturan @FireWire yang sangat menarik, tetapi saya bertanya-tanya bagaimana Anda berurusan dengan kunci API saat digunakan oleh modul. Biasanya, seperti dalam modul Kefasihan (luar biasa) Anda, kunci API disimpan di db melalui konfigurasi modul, yang nyaman karena bersifat lokal ke modul tetapi dalam penyiapan Anda akhirnya tersebar di sekitar kredensial Anda
Ini pertanyaan terbuka tetapi haruskah ada objek $config yang akan berisi kunci api yang dapat diperiksa oleh modul terlebih dahulu dan jika kosong bergantung pada administrator untuk memasukkan ini dalam konfigurasi modul?
Tautkan ke komentarBerbagi di situs lain
FireWire
Diposting 30 November 2021
FireWire
- Anggota
- 170
- 172
- LokasiCalifornia
- Membagikan
Diposting 30 November 2021
5 jam yang lalu, kata monollonom
Ini adalah pengaturan @FireWire yang sangat menarik, tetapi saya bertanya-tanya bagaimana Anda berurusan dengan kunci API saat digunakan oleh modul. Biasanya, seperti dalam modul Kefasihan (luar biasa) Anda, kunci API disimpan di db melalui konfigurasi modul, yang nyaman karena bersifat lokal ke modul tetapi dalam penyiapan Anda akhirnya tersebar di sekitar kredensial Anda
Ini pertanyaan terbuka tetapi haruskah ada objek $config yang akan berisi kunci api yang dapat diperiksa oleh modul terlebih dahulu dan jika kosong bergantung pada administrator untuk memasukkan ini dalam konfigurasi modul?
Anda 100% benar tentang penyimpanan kunci DB untuk modul. Kasus penggunaan saya untuk kredensial di. env adalah untuk kebutuhan terkait non-modul yang diperlukan dalam berbagai skrip di sekitar basis kode. Beberapa di antaranya tidak ada dalam namespace ProcessWire sehingga wire() & $config tidak tersedia
Contoh yang bagus adalah tempat saya bekerja. Saya telah membuat REST API di seluruh perusahaan untuk berinteraksi dengan sistem kami sehingga kunci tersebut ada di. lingkungan. Sekilas membuatnya sangat mudah untuk dikerjakan. Dengan nama variabel yang bersih, saya tidak mengalami polusi/tabrakan $_ENV. Dua variabel khusus yang kami buat adalah $config->envIsProduction dan $config->envIsDevelopment untuk membantu mengubah perilaku kode bila diperlukan, kami menggunakannya untuk melakukan hal-hal seperti mengganti skrip di markup (seperti produksi/pengembangan Google Tag Manager/Analytics)
Inilah contoh yang lebih kuat (dummy) dari pembangunan lokal kami. env,
ENVIRONMENT="development" # Either production or development # CMS CMS_DEBUG="true" CMS_CHMOD_DIR=0755 CMS_CHMOD_FILE=0644 CMS_USE_PAGE_CLASSES="true" CMS_USE_FUNCTIONS_API="true" CMS_PREPEND_TEMPLATE_FILE="_init.php" CMS_USER_AUTH_SALT="d5e3ac4deba1e382255bbd8755d7e713" CMS_LOCALE="en_US.UTF-8" CMS_TIMEZONE="America/Los_Angeles" CMS_DEFAULT_ADMIN_THEME="AdminThemeUikit" CMS_INSTALLED=1580677417 CMS_MODULE_INSTALL="true" # CMS Database - Development CMS_DB_HOST="127.0.0.1" CMS_DB_NAME="pw_website_db_name" CMS_DB_USER="db_user_name" CMS_DB_PASS="hB99kVrqS444VZlrrr" CMS_DB_PORT="3306" CMS_DB_ENGINE="InnoDB" # Renova Energy API - Development RE_API_URL="//secure-tunnel-url.ngrok.io/" RE_API_KEY_WEBSITE="d5d891e204f5473990bb533cf7fca22f" RE_API_KEY_EVENT="531706b9837744ecbbf2b008bc11a681" # Mailgun MG_KEY="5af07ec6-315c-48d9-b615-f1cfb3d75820" MG_DOMAIN="mg.ourconfigureddomain.com" # Forecast.io FORECAST_IO_KEY="5fce4a3251f711ecbf630242ac130002" # CallTrackingMetrics Webhook Auth Token CTM_WEBHOOK_AUTH_HASH="227040707a1b4e13bc88facf928defe0" # Web API Authentication Keys WEB_API_KEY_SALESFORCE="84f13985-77f5-4521-9c2d-1567ddb9bf2e" WEB_API_KEY_APP="e7051f6e-5905-47f6-9108-93d2f02a53b8"Juga, terima kasih atas kata-kata baik tentang Kefasihan, nantikan rilis besar (terbesar) berikutnya segera
Tautkan ke komentarBerbagi di situs lain
dotnetic
Diposting 30 November 2021
dotnetic
- Anggota
- 974
- 1.123
- LokasiMünster, Jerman
- Membagikan
Diposting 30 November 2021
14 jam yang lalu, kata FireWire
Kami menyimpan semua kredensial. env di direktori root dan kemudian dimuat menggunakan paket yang disebut phpdotenv. Itu. env dimuat dan kemudian kredensial dapat diakses saat runtime melalui $_ENV global. Beberapa detail lebih lanjut tentang pengaturan ini
Saya pikir ini harus menjadi default untuk kredensial di ProcessWire. Banyak CMS atau Framework lain seperti Laravel atau Statamic (yang merupakan aplikasi Laravel) menggunakan cara ini
- 2
Tautkan ke komentarBerbagi di situs lain
FireWire
Diposting 30 November 2021
FireWire
- Anggota
- 170
- 172
- LokasiCalifornia
- Membagikan
Diposting 30 November 2021
@dotnetic Saya mengambilnya setelah mengembangkan API kami di Slim dan melihat beberapa praktik terbaik. Akan sangat bagus jika ini adalah default ProcessWire