CodeIgniter podnosimy poziom bezpieczeństwa
CodeIgniter to framework pisany z myślą o bezpieczeństwie aplikacji w PHP. Bardzo często programista pochłonięty swoim projektem lub pod presją czasu (czas nie jest sprzymierzeńcem programistów) popełnia kardynalne błędy w kodzie pozostawiając luki, które może wykorzystać potencjalny włamywacz. Kompromitacja mało popularnego blogu czy strony prywatnej nie jest może katastrofą, ale bardzo często błędy znajdują się na stronach urzędów czy korporacji. Trafiają się także źle wykonane aplikacje webowe (sklepy, systemy CRM/ERP/CMS itp.). CodeIgniter pisany jest z nastawieniem na bezpieczeństwo i już na poziomie samego framework’a podjęto wiele działań skutecznie eliminujących większość stosowanych ataków. Mimo tego, warto podczas tworzenia każdego projektu w CI podjąć kilka kroków, które jeszcze bardziej podniosą poziom bezpieczeństwa naszej aplikacji.
W domyślnej konfiguracji zaproponowana przez CodeIgniter struktura katalogów wygląda mniej więcej tak:
katalog_domowy
web
system
application
controllers
models
views
index.php
Powyższa struktura jest mało wygodna jeśli nasz projekt ewoluuje i dodatkowo chcemy w łatwy sposób oddzielić aplikację od framework’a. Umieszczenie aplikacji w gałęzi framework’a zmusza nas podczas aktualizacji CI do pilnowania, żeby nie nadpisać plików aplikacji. Lepszym rozwiązaniem będzie oddzielenie aplikacji od framework’a i dodatkowo zmiana domyślnych nazw tych katalogów. Będzie to utrudnienie dla włamywacza, który może chcieć wykorzystać luki w samym CI (nie ukrywajmy, że błędy w kodzie są zawsze, tylko o niektórych z nich dowiadujemy się za późno). Rozwiązanie to umożliwia także, tworzenie katalogów z wersjami aplikacji i framework’a, w razie potrzeby w łatwy sposób możemy testować aplikację. Nowa struktura może wyglądać tak:
katalog_domowy
web
index.php
app_01
controllers
models
views
app_02
controllers
models
views
ci_171
ci_152
Idąc jeszcze dalej możemy pokusić się o przesunięcie kodu aplikacji i framework’a poza DocumentRoot naszego serwera. W ten sposób całkowicie odcinamy możliwość wykorzystania kodu w nieautoryzowany sposób. Wystarczy w pliku index.php odpowiednio ustawić ścieżki:
- $system_folder = "../ci_171";
- $application_folder = "../app_01";
Struktura katalogów teraz będzie wyglądała następująco:
katalog_domowy
web
index.php
app_01
controllers
models
views
app_02
controllers
models
views
ci_171
ci_152
Powyższy zabieg znacząco poprawi bezpieczeństwo całego projektu i dodatkowo ułatwi testowanie aplikacji w różnych środowiskach.
