Hvordan gør jeg min database forbindelse sikker?

Jeg arbejder i øjeblikket på en hjemmeside for min kirke ‘ s college i gruppen, og jeg er begyndt at få lidt bekymret over sikkerheden af hvad jeg skriver. For eksempel, jeg kan bruge denne funktion:

function dbConnect() 
  {
  global $dbcon;

  $dbInfo['server'] = "localhost";
  $dbInfo['database'] = "users";
  $dbInfo['username'] = "root";
  $dbInfo['password'] = "password";

  $con = "mysql:host=" . $dbInfo['server'] . "; dbname=" . $dbInfo['database'];
  $dbcon = new PDO($con, $dbInfo['username'], $dbInfo['password']);
  $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $error = $dbcon->errorInfo();

  if($error[0] != "") 
    {
    print "<p>DATABASE CONNECTION ERROR:</p>";
    print_r($error);
    }
  }

til at oprette forbindelse til den database, når jeg gør en forespørgsel af en slags. Jeg bruger altid BOB udarbejdet opgørelser for at undgå SQL-injektion fra enhver bruger-input, og jeg kan bruge htmlspecialchars til at flygte, før du overfører. Mit spørgsmål er dette: Hvordan kan jeg beskytte mit brugernavn og min adgangskode til min database? Jeg ved ikke, hvis nogen kan se kilden til mine PHP filer, men hvis de kan, kan jeg kun forestille mig, at jeg ville være spules. Hvad gør jeg?

Du har absolut ret til at sætte spørgsmålstegn ved denne. Skilldrick har det rigtige svar – lægge følsomme data i en fil uden for den document root. Det er faktisk et spørgsmål, jeg stillede kandidater, når jeg var leje for en PHP rolle.
En anden ting her, som du UDSKRIVER en database fejl streng. Jeg ville komme op med en anden skovhugst ordning, sådan at der i produktionen miljø, du ikke udskrivning af oplysninger, som dette. Det afslører detaljer om dit system. Hvis dens produktion, log det til noget som syslog, en fil, eller sende dig en e-mail således, at det også kan blive anmeldt i din fritid.
Enhver chance er der nogen der kan pege mig i den rigtige retning til at finde info om, hvordan du lægger filer uden for min web-serverens rod-bibliotek? @josh tak for heads-up.
nogle filer vil leve i web root uanset. det er virkelig afhænger af strukturen af din ansøgning. det simpleste eksempel er kommer til at være index.php inde i webroot med noget som include( “some/dir/outside/of/the/webroot/class.php” );
Sikring af database legitimationsoplysninger og sikre en database forbindelse er to forskellige ting – af en lang skudt.

OriginalForfatteren JoeCortopassi | 2010-02-27

3 svar

  1. 9

    Du skal lægge din database legitimationsoplysninger i en fil uden for dokumentet, roden, så hvis der er noget, rydde op og din PHP bliver vist til brugerne fn-parset, ingen vil være i stand til at se dit password.

    Have et kig på denne artikel om emnet denne artikel om emnet:

    Løsningen er simpel. Sted alle følsomme data uden for dit web-server dokument root. Mange eksperter nu går ind placere de fleste, hvis ikke alle, af din php-kode uden din web server dokument root. Da PHP er ikke begrænset af de samme begrænsninger, er du web-server, kan du lave en mappe på samme niveau som dit dokuments rod og placere alle dine følsomme data, og koden der.

    Præcis. Jeg ville ikke leje en PHP-dev, som ikke kender denne.
    du siger, at jeg bør lægge det i en separat php fil og inkludere det i den side fil? Eller noget helt andet?
    Det er korrekt, men filen skal være uden document root. Strengt taget behøver du ikke at medtage det: Du kunne læse det som en config-fil, men traditionelt er det bare ville være en anden PHP fil.
    hvordan kan du tilføje en fil uden for roden af serveren?
    Du er alt tyder på, at gemme legitimationsoplysninger, uden wwwroot. Ok, jeg forstår-sikkerhed baggrund. Men hvordan skal det opbevares i version kontrol og derefter (prøve config)? Normalt wwwroot er roden af git repo, så hvis der er noget udenfor – det vil være uden for VC. Forestil dig ny udvikler, der forsøger at oprette en lokal instans for udvikling – hvordan skulle han vide magi som at “tage denne fil, skal du kopiere det ud og udfylde”?

    OriginalForfatteren Skilldrick

  2. 8

    Ok, det behov en afklaring. Nogle har antydet, at du lægger følsomme data uden for det dokument rod. Dette har nogle fortjeneste, men er mere placebo end noget andet i funktionalitet.

    Du har til at overveje de potentielle kilder til problemer.

    • En person med shell-adgang til maskinen vil kompromittere dit databasen oplysninger, uanset hvor du lægger den. Dette kan omfatte både godkendte brugere og dem, der udnytter en sårbarhed til at få shell-adgang (det er sket en masse);

    • Hvis PHP er deaktiveret, eller den Web-server er narret til at tro, at det er så der er mulighed for, at PHP-filer, der serveres i rå form. At sætte dem uden for dokumentet, roden vil beskytte dig mod denne;

    • Hvis nogen på en eller anden måde formår at skrive en PHP script til dokumentet, roden, er det dybest set det samme som en person, der shell-adgang, så ingen foranstaltninger, der vil beskytte dig.

    Praktisk, hvis din Web server ikke er kompromitteret det er, i de tilfælde, hvor din config filer, der er uden for dokumentet, roden vil beskytte dig, er ret usandsynligt.

    Det vigtigste punkt i sikkerhed med databaser er at sikre, at en person fra internettet ikke kan oprette forbindelse direkte. Dette kan gøres med en firewall, som er bindende for den database, til en privat IP-adresse eller ved at lægge databasen på en privat server.

    Så jeg prøver ikke at være skødesløs/usikker kodning min database-forbindelse som denne?
    nej, det du gør, er ret almindelig.
    Wow, dette er så forkert. Se Skilldrick svar.
    Dette fungerer, hvis du styre værten, men ikke i delt hosting. Kan du give et eksempel på en situation, hvor din kilde er kompromitteret inde i webroot hvis din web-server er sat korrekt op? Og du er ikke gemme dine omfatter en dum måde.inc eller noget andet, der er gengivet som tekst).
    hvis det er delt hosting, så kan du ikke sikre dig, at din web server (eller fortsætter med at være), som er oprettet korrekt.

    OriginalForfatteren cletus

  3. 3

    Der er forholdsregler, du kan tage. Oprette en mySQL-bruger, der er bestemt til, hvad din ansøgning skal være i stand til at gøre. Dette kan begrænse omfanget af de skader en angriber kan gøre, hvis han er kompromitteret dit brugernavn og password. For eksempel, giver brugeren mulighed for at indsætte, opdatere, skal du vælge osv., men IKKE drop osv. Yderligere, som cletus nævnt, database, må ikke være tilgængelige for udenforstående. På shared hosting miljø, dette betyder normalt, at db kan kun være tilsluttet fra din www-server eller localhost.

    Re: kalpaitch, må ikke videregive dit password rundt i nogle reversible hash. Mennesker bør aldrig se din kilde.

    OriginalForfatteren Josh

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *