sql >> Database teknologi >  >> RDS >> Mysql

PHP og MySQL - hvordan undgår man adgangskode i kildekoden?

Den nemmeste måde er, som du sagde, at bruge en konfigurationsfil.

Mange frameworks bruger dette (Zend , CakePHP , Kohana osv.), og det er den mest almindelige måde at gøre tingene på (selv i et ikke-PHP-miljø som f.eks. ASP.NET med dets web.config filer). Dette giver dig også mulighed for at kopiere konfigurationsværdier fra miljø til miljø ved blot at kopiere filerne til webstedet, hvilket er en fordel i forhold til at stole på serveropsætningsmiljøvariabler (som meget hurtigt kan gå tabt og glemmes).

Du behøver ikke at bekymre dig om sløring af adgangskoden, da det ikke er en fil, der er tilgængelig i hele verden, og den burde bestemt ikke være tilgængelig på nettet. Det, jeg mener med dette, er, at du enten vil a) fortælle din webserver, at den ikke skal servere din konfigurationsfil ( IIS gør allerede dette med web.config filer og viser en HTTP 404.8-status i stedet for indholdet) eller b) Flyt den uden for din webserver. Hvis nogen kan se din konfigurationsfil, er det værre end at have den i din kildekode.

Det vil også være en god ide at have en basisversion (tom/standard) af konfigurationsfilen og adskille den efter miljøer, så du kan have en anden konfigurationsfil til produktions-, udviklings- og testplatforme.

En miljøvariabel er den mest almindelige måde at skelne mellem disse miljøer på, noget som nedenstående kode:

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

En anden måde, der er ret almindelig, er at bruge en XML-konfigurationsfil og kun læse de værdier ind, som du har brug for efter behov (lagre en cachet kopi af konfigurationsfilen i hukommelsen). Dette kan meget nemt begrænses til kun at indlæse i bestemte værdier i stedet for at tillade vilkårlig inklusion af PHP-filer og er samlet set en bedre løsning efter min mening, men ovenstående burde få dig i gang i den rigtige retning.

Du vil sandsynligvis have din VCS for at ignorere filen. På den anden side vil du måske have, at et skelet af filen, eller et med rimelige standardindstillinger (sidstnævnte gælder selvfølgelig ikke for login-data), skal være versionsstyret. En almindelig måde at håndtere det på er at have en indtjekket skabelonkonfigurationsfil, og installationsproceduren kopierer denne fil til placeringen af ​​den rigtige konfigurationsfil, hvor den er tilpasset. Dette kan være en manuel eller en automatiseret proces.

(Selv om det er noget irrelevant til hovedspørgsmålet, giver indførelsen af ​​en konstant for dit miljø dig mulighed for at gøre nogle andre fede ting som at udskyde en falsk mailimplementering i stedet for en live SMTP en, men dette kunne selvfølgelig også gøres med en konfigurationsfil)



  1. Oracle:Hvordan finder man ud af, om der er en afventende transaktion?

  2. MySQL spring de første 10 resultater over

  3. Azure Automation Methods

  4. bedste e-handelsvogne til Zend Framework-udvikler