2012-04-16 25 views
13

Powiel możliwe:
How to secure database passwords in PHP?gdzie umieścić poufnych informacji z bazy danych

Ostatnio dostałam projekt strony internetowej, która miała być wykonane w PHP, ale nie mam dużo doświadczenie w PHP. Tak czy inaczej, wszystko działa, ale jest dużo miejsca do poprawy. Jedyną rzeczą, której nie czuję się dobrze, jest sposób, w jaki mam do czynienia z bazą danych: umieszczam informacje o połączeniu z bazą danych w oddzielnym pliku db.php i dołączam go tam, gdzie jest to potrzebne. Ale pamiętam, że widziałem pliki źródłowe PHP zwracane przez serwer przez długi czas.

Moje pytanie brzmi: jaki jest lepszy lub najlepszy sposób/miejsce na umieszczenie danych wrażliwych na bazy danych?

Nawiasem mówiąc, jak NIE pozwolić, aby PHP wyświetlało komunikaty o błędach na stronach internetowych, gdy coś poszło nie tak? Niestandardowa strona błędów lub ustawienia gdzieś w php.ini? Dzięki!

Uwaga: Używam PHP w starym stylu, a nie obiektowo. Ale jestem otwarty na zorientowanym obiektowo lub MVC sposób, czy istnieją lepsze podejść w ten sposób przygotować się do przyszłych projektów

+0

Dobre, ważne pytania! +1 za myślenie o bezpieczeństwie. – David

+4

Na swój sposób, ['display_errors'] (http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors) powinno ** ZAWSZE ** być ustawione na' off 'na serwerze produkcyjnym. W ten sposób PHP wyświetli błąd 500 zamiast pokazywać rzeczywisty błąd. –

+0

Chyba display_errors = off w php.ini powinien zapobiegać wyświetlaniu jakichkolwiek błędów – anuragsn7

Odpowiedz

7

Nie wiem, czy to jest to, czego szukasz:
można umieścić swoje dane poufne w pliku db.php, ale poza głównym katalogiem internetowym (public_html lub www).

Na przykład, możesz mieć katalog o nazwie config, który jest rodzajem twojego katalogu głównego, i przechowywać tam swój plik db.php.

Możesz dołączyć plik Db.php takiego:

require_once('../config/db.php'); 

Mam nadzieję, że to pomaga.

+2

+1 za to rozwiązanie, nie zapomnij także zmienić uprawnień tego pliku na najniższy, ale wciąż czytelny przez serwer WWW. Jeśli plik jest własnością procesu serwera sieciowego, być może '0600' będzie wystarczająco bezpieczny? –

1

Dobrze jest umieścić go w pliku db.php, wystarczy użyć require_once() tuż po otworze <?php tag każdego dokumentu.

Jeśli ograniczenie bazeir nie działa, przenieś plik db.php poza katalog główny użytkownika, tak aby jego dostępność była zdecydowanie niedostępna przez http/ftp. Upewnij się jednak, że uprawnienia są ustawione poprawnie dla tego pliku.

Ponieważ nie korzystasz z OOP lub struktury MVC dla kodu, jest to najlepsza trasa do przejścia.

2

Chciałbym osobiście utworzyć plik o nazwie Db.php i umieść ten powyżej folderze public_html na serwerze

np

<?php 
    error_reporting(0); 
    $link = FALSE; 
    $link = mysql_connect('hostname', 'username', 'password'); 
    if (! $link) 
    { 
     die("Couldn't connect to mysql server!"); 
    } else { 
     mysql_select_db('databasename'); 
    } 
?> 

To wyłącza raportowanie błędów w tym samym czasie jak podłączenie do listy bazy danych, z pliku index.php należy dołączyć następujący plik:

<?php require('../db.php'); ?> 
Powiązane problemy