sql >> Databáze >  >> RDS >> Mysql

PHP a MySQL - jak se vyhnout heslu ve zdrojovém kódu?

Nejjednodušší způsob je, jak jste řekl, použít konfigurační soubor.

Toto používá mnoho frameworků (Zend , CakePHP , Kohana , atd.) a je to nejběžnější způsob, jak dělat věci (dokonce i v prostředí bez PHP, jako je ASP.NET s jeho web.config soubory). To vám také umožňuje kopírovat konfigurační hodnoty z prostředí do prostředí pouhým zkopírováním souborů pro web, což je výhoda oproti spoléhání se na proměnné prostředí nastavené na serveru (které lze velmi rychle ztratit a zapomenout).

Neměli byste se obávat zatemnění hesla, protože to není světově dostupný soubor, rozhodně by neměl být přístupný na webu. Chci tím říct, že buď a) řeknete svému webovému serveru, aby neposkytoval váš konfigurační soubor ( IIS již to dělá s web.config soubory a místo obsahu zobrazí stav HTTP 404.8) nebo b) přesuňte jej mimo svůj webový adresář. Pokud někdo vidí váš konfigurační soubor, je to horší, než když ho máte ve zdrojovém kódu.

Bude také dobrý nápad mít základní (prázdnou / výchozí) verzi konfiguračního souboru a oddělit ji podle prostředí, abyste mohli mít jiný konfigurační soubor pro produkční, vývojové a testovací platformy.

Proměnná prostředí je nejběžnějším způsobem rozlišení mezi těmito prostředími, něco jako kód níže:

// Check if it's been set by the web server
if (!empty($_ENV['ENVIRONMENT'])) {
    // Copy from web server to PHP constant
    define('ENVIRONMENT', $_ENV['ENVIRONMENT']);
}

if (!defined('ENVIRONMENT')) {
    // Default to development
    define('ENVIRONMENT', 'development');
}

// Load in default configuration values
require_once 'config.default.php';

// Load in the overridden configuration file for this environment
require_once 'config.' . ENVIRONMENT . '.php';

Dalším způsobem, který je docela běžný, je použít konfigurační soubor XML a načíst pouze hodnoty, které potřebujete podle potřeby (uložení kopie konfiguračního souboru do paměti). To lze velmi snadno omezit na načítání pouze v určitých hodnotách, spíše než umožnit libovolné začlenění souborů PHP a je to podle mého názoru celkově lepší řešení, ale výše uvedené by vás mělo navést správným směrem.

Pravděpodobně budete chtít svůj VCS ignorovat soubor. Na druhou stranu možná budete chtít, aby kostra souboru nebo nějaká s rozumnými výchozími hodnotami (to druhé samozřejmě neplatí pro přihlašovací údaje), byla řízena verzí. Běžným způsobem, jak se s tím vypořádat, je mít zapsaný konfigurační soubor šablony a instalační procedura zkopíruje tento soubor do umístění skutečného konfiguračního souboru, kde je přizpůsoben. Může se jednat o ruční nebo automatizovaný proces.

(Ačkoli to poněkud nesouvisí s hlavní otázkou, zavedení konstanty pro vaše prostředí vám umožní dělat některé další skvělé věci, jako je odložení implementace falešné pošty namísto živého SMTP jeden, ale to lze samozřejmě provést také pomocí konfiguračního souboru)



  1. Zachytitelná závažná chyba:Objekt třídy mysqli_stmt nelze převést na řetězec

  2. Plánovaná údržba databáze IS 24/7 na MS SQL Server

  3. Připojte aplikace ODBC ve Windows k Zoho CRM

  4. Vytvoření procedury v mySql s parametry