Ochrona bazy danych
Jeżeli udostępniamy bazę danych poprzez stronę WWW, to musimy zabezpieczyć serwer baz danych. Od razu należy powiedzieć, że administratorzy blokują możliwości działań ryzykownych, niemniej musimy znać zagrożenia.
MySQL w aspekcie serwera Apache
Należy unikać uruchamiania serwera MySQL z poziomu użytkownika root. Dałoby to każdemu użytkownikowi logującemu się do serwera baz danych, prawo do odczytywania i zapisywania wszystkich plików. Włamianie do witryny nie byłoby w takiej sytuacji dużym problemem. Powinno się zarejestrować nowego użytkownika, przeznaczonego do uruchamiania serwera MySQL.
Stosowanie haseł
Każdemu użytkownikowi powinniśmy nadać hasło dostępu, które powinno być często zmieniane i trudne do odgadnięcia. Nejlepszym rozwiązaniem jest losowa kombinacja liter i cyfr. Jeżeli hasła są przechowywane w plikach, to pliki te powinny być dostępne tylko dla właścicieli tych haseł.
Skrypty PHP operujących na bazie danych, muszą najpierw połączyć się z danym serwerem, co wymaga podania hasła dostępu odpowiedniego użytkownika. Hasło oraz identyfikator tego użytkownika zapisuje się w pliku dołączanym do skrypu za pomocą funkcji include()
. Plik ten powinien być zapisany w innej lokalizacji jak dokumenty WWW i dostępny, tylko dla zalogowanego użytkownikowa. Opdowiedni przykład jest pokazywany podczas nauki PHP.
Jeżeli plik z hasłem jest przechowywany w tej samej lokalizacji co dokumenty WWW, to należy się upewnić że nie będą one analizowane przez interpreter PHP ani też wyświetlone przez przeglądarkę. Tutaj znajduje się przykład.
Hasła przechowywane w bazie danych powinny być szyfrowane jednostronnie (bez możliwości odszyfrowania) za pomocą funkcji md5()
lub sha1()
. Należy wtedy pamiętać, że po zapisaniu zaszyfrowanego hasła za pomocą INSERT
, w treści polecenia SELECT
należy zastosować tę samą funkcję szyfrującą aby porównać hasła zaszyfrowane.
Przywileje użytkowników
Omawialiśmy już system uprawnień (przywilejów) MySQL oraz następstwa nadania poszczególnych typów. Przypomnijmy sobie, że najważniejszą zasadą jest przyznawanie minimalnych, tylko niezbędnych uprawnień. Bardzo ryzykowne jest nadanie przywilejów PROCESS
, FILE
, SHUTDOWN
i RELOAD
uzytkownikom którzy nie są administratorami. Użytkownik z uprawnieniem PROCESS
, ma możliwość przeglądania czynności i danych innych użytkowników, w tym również haseł dostępu, natomiast FILE
uprawnia do edycji plików systemowych serwera. Ostrożność jest wskazania przy dadawaniu uprawnienia GRANT
, ponieważ taki użytkownik może nadawać innym użytkownikom swoje uprawnienia.
Dane wysyłane za pomocą formularzy
Powinny być dokładnie weryfikowane co do treści jak również ich rozmiaru.
Dane poufne
Jeżeli użytkownicy mają wysyłać do bazy dane poufne lub podawać hasła dostępu, to powinno się zastosować protokół SSL (Secure Socets Layer), są one wtedy przekazywane z przeglądarki do serwera w postaci zaszyfrowanej, a nie jako zwykły tekst.