2011-08-14 10 views
5

Witajcie, jestem nowy w php i odkryłem, że w przypadku połączenia z bazą danych wpisujesz swoje hasło bezpośrednio do pliku .php ("mysql_connect ($ host, $ user, $ pass, $ db"). Czytałem o haszowaniu i Mam zamiar użyć hashowania, ale pytanie jest, czy użytkownik może pobrać prekompilowany plik .php i zobaczyć mój kod źródłowy, a tym samym uzyskać moje hasło do bazy danych. Jeśli pisze "domena/home", mam plik index.php, który zapobiega użytkownik wchodząc do katalogu Z góry dziękujęHasło bazy danych PHP5 i czy można je ukraść?

+0

Nie dotyczy: rozszerzenie mysql jest nieaktualne i znajduje się na drodze do wycofania. Przejdź na mysqli lub [PDO] (http://php.net/). – outis

Odpowiedz

3

Jak wspomniano przez innych respondentów, zwykle nie powinno to stanowić problemu, ponieważ użytkownicy nie będą mogli zobaczyć kodu PHP. Jeśli jednak planujesz udostępnić kod innym, może to być trochę kłopotliwe usunięcie nazwy użytkownika i hasła przed wysłaniem go komuś (a jeśli zapomnisz, że zna twoje hasło).

Można umieścić informacje w pliku, a następnie odczytać je w PHP.Na przykład, utwórz plik o nazwie mysql.ini w swoim katalogu domowym i umieścić następujące informacje w nim:

host  = "127.0.0.1" 
username = "user" 
password = "pass" 
database = "db" 

Następnie przeczytać go w PHP i podłączyć w następujący sposób:

$settings = parse_ini_file('/home/mysql.ini'); 
mysql_connect($settings['host'], $settings['username'], $settings['password'], $settings['database']); 

Pamiętaj, aby upewnić się, plik znajduje się w sekcji serwera WWW, który nie jest publicznie dostępny, w przeciwnym razie użytkownicy będą mogli odczytać dane logowania.

3

Nie można zaszyfrować hasła MySQL i nadal łączyć się z bazą danych. Jeśli można połączyć się za pomocą zakodowanego hasła, osoba atakująca może uzyskać skrót i połączyć się równie dobrze. Hashowanie (nawet lepsze, gdy jest solone) jest dobrą rzeczą, jeśli przechowujesz hasła dla użytkowników w bazie danych, ale nie nadaje się do użytku podczas przechowywania danych podstawowe dane uwierzytelniające.

Większość osób, a nie bezpośrednio, w tym wywołanie mysql_connect z wszystkimi poświadczeniami w głównym pliku aplikacji, będzie co najmniej require plikiem konfiguracyjnym spoza katalogu głównego dokumentu zawierającego poświadczenia.

Jeśli plik taki jak config.php znajduje się poza katalogiem głównym dokumentu, to jeśli nie można znaleźć otworu do przechodzenia do katalogu na serwerze, nie można uzyskać zdalnego dostępu do config.php.

2

Wyświetl źródło Twojej strony php - zobacz dowolny kod php? nie należy uruchamiać go przez serwer przed wysłaniem do przeglądarki użytkowników. nadal zaleca się umieszczenie pliku z danymi logowania poniżej katalogu głównego, na wypadek, gdyby coś zepsuło się na serwerze, a pliki php nie zostały przeanalizowane.

+0

Dziękuję wszystkim za odpowiedzi, byli bardzo pomocni :) –

3

może użytkownik pobrać plik .php prekompilowanego

nie przez samego mod_php, ale jeśli jest jakaś luka bezpieczeństwa w aplikacji internetowej (lub serwer WWW), to na pewno ktoś mógłby odczytać losowe PHP akta. Jeśli atakujący może włamać się do serwera sieci Web, może pobrać hasło do bazy danych - tak, nawet jeśli przechowujesz je poza katalogiem głównym.

Należy założyć, że stanie się to pewnego dnia; starają się ograniczyć konsekwencje takiego wycieku informacji. Skoncentruj się na ograniczaniu konta bazy danych, z którym się łączysz. Aplikacja internetowa nie powinna łączyć się z kontem bazy danych, które ma uprawnienia do odczytu/zapisu do każdej tabeli w bazie danych. Powinieneś ograniczyć użytkownika DB, aby mógł czytać tylko z tabel, z których musi odczytać, i zapisywać tylko do tabel, do których musi pisać.

Korzystanie z procedur przechowywanych to dobry sposób na dodanie dodatkowej warstwy zabezpieczeń, ponieważ można przeprowadzać kontrole w samej bazie danych pod kątem działań, które użytkownik witryny może wykonać. Następnie użytkownik Web DB powinien mieć możliwość interakcji z bazą danych za pomocą procedur. Ograniczałoby to działania, które mógł podjąć atakujący, nawet jeśli byłby w stanie wydawać losowe zapytania do bazy danych.