sql >> Databasteknik >  >> RDS >> Mysql

PHP och MySQL - hur undviker man lösenord i källkoden?

Det enklaste sättet är, som du sa, att använda en konfigurationsfil.

Många ramverk använder detta (Zend , CakePHP , Kohana , etc) och det är det vanligaste sättet att göra saker på (även i en icke-PHP-miljö som ASP.NET med dess web.config filer). Detta gör att du också kan kopiera över konfigurationsvärden från miljö till miljö genom att bara kopiera filerna för webbplatsen, vilket är en fördel jämfört med att förlita dig på serverinstallationsmiljövariabler (som mycket snabbt kan förloras och glömmas).

Du ska inte behöva oroa dig för att lösenordet ska fördunklas eftersom det inte är en fil som är tillgänglig för hela världen, den borde absolut inte vara tillgänglig på webben. Vad jag menar med detta är att du antingen skulle a) Be din webbserver att inte visa din konfigurationsfil ( IIS gör redan detta med web.config filer och visar en HTTP 404.8-status istället för innehållet) eller b) Flytta den utanför din webbserverkatalog. Om någon kan se din konfigurationsfil är det värre än att ha den i din källkod.

Det kommer också att vara en bra idé att ha en basversion (tom/standard) av konfigurationsfilen och separera den per miljö, så att du kan ha en annan konfigurationsfil för produktions-, utvecklings- och testplattformar.

En miljövariabel är det vanligaste sättet att skilja mellan dessa miljöer, ungefär som koden nedan:

// 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';

Ett annat sätt som är ganska vanligt är att använda en XML-konfigurationsfil och endast läsa in de värden du behöver efter behov (lagra en cachad kopia av konfigurationsfilen i minnet). Detta kan mycket enkelt begränsas till att endast ladda i vissa värden, snarare än att tillåta godtycklig inkludering av PHP-filer och är överlag en bättre lösning enligt min mening, men ovanstående bör få dig igång i rätt riktning.

Du vill förmodligen ha din VCS för att ignorera filen. Å andra sidan kanske du vill att ett skelett av filen, eller ett med rimliga standardvärden (det senare gäller naturligtvis inte inloggningsdata), ska versionskontrolleras. Ett vanligt sätt att hantera det är att ha en incheckad mallkonfigurationsfil, och installationsproceduren kopierar den filen till platsen för den riktiga konfigurationsfilen, där den anpassas. Detta kan vara en manuell eller en automatiserad process.

(Även om det inte är relaterat till huvudfrågan, kan du genom att införa en konstant för din miljö göra några andra coola saker som att skjuta upp till en falsk e-postimplementering istället för en live SMTP en, men detta kan naturligtvis också göras med en konfigurationsfil)



  1. Hur deklarerar man lokala variabler i postgresql?

  2. JPA infoga förälder/underordnade resultat i MySQLIintegrityConstraintViolationException

  3. SQL-uppdatering från en tabell till en annan baserat på en ID-matchning

  4. Välj ett värde från en grupp baserat på ordning från andra kolumner