Podręcznik użytkownika CodeIgniter wersja 2.2.1


Klasa Security

Klasa Security zawiera metody, które pomagają tworzyć bezpieczne aplikacje, przetwarzać dane wejściowe pod kontem bezpieczeństwa.

Filtrowanie XSS

CodeIgniter dostarcza filtr pozwalający zapobiegać atakom typu Cross Site Scripting Hack, który możne automatycznie filtrować wszystkie dane POST i COOKIE przesyłane do aplikacji. Filtr ten może być również uruchamiany samodzielnie dla poszczególnych zmiennych. Domyślnie filtr ten nie jest włączony globalnie, ponieważ wymaga trochę większych nakładow pamięci oraz dlatego, że nie musisz go zawsze potrzebować.

Filtr XSS szuka powszechnie stosowanych technik osadzania złośliwego kodu JavaScript w Twoich danych lub innego typu kodu, który może wykraść pliki cookies lub zrobić inne złośliwe rzeczy. Jeśli zostaną wykryte jakieś zakazane dane, to zostaną wyświetlone w sposob bezpieczny poprzez konwersję do encji.

Uwaga: Ta funkcja powinna być używana tylko w odniesieniu do danych w momencie ich wysyłania. Nie jest to coś, czego powinno się używać w normalnym procesie działania aplikacji, ponieważ operacje tego typu wymagają sporego nakładu pamięci.

Aby dokonać filtrowania XSS użyj następującej funcji:

$this->security->xss_clean()

Oto przykład użycia:

$data = $this->security->xss_clean($data);

Jeśli chcesz aby filtrowanie odbywało się automatycznie za każdym razem kiedy aplikacja będzie miała do czynienia z danymi POST lub COOKIE, możesz włączyć taką opcję poprzez otwarcie pliku application/config/config.php i edycję tej wartości:

$config['global_xss_filtering'] = TRUE;

Uwaga: Jeśli korzystasz z klasy Form validation, to ona również daje Ci możliwość przeprowadzenia filtrowania XSS.

Drugi, opcjonalny parametr, is_image, pozwala na użycie tej funkcji do sprawdzenia pliku graficznego pod kontem ataku XSS. Funkcja jest przydatna przy zabezpieczaniu przesyłania plików. Kiedy drugi parametr jest ustawiony na wartość TRUE, funkcja zamiast zwracać zmieniony ciąg, zwraca wartość TRUE w przypadku kiedy plik jest bezpieczny i wartość FALSE, kiedy zawiera potencjalnie złośliwe informacje, które przeglądarka mogłaby wykonać.

if ($this->security->xss_clean($file, TRUE) === FALSE)
{
    // plik nie przeszedł testu XSS
}

$this->security->sanitize_filename()

Kiedy akceptujemy nazwy plików dostarczone przez użytkowników, najlepszym wyjściem jest "zdezynfekowanie" ich aby uniknąć ataków typu directory traversal i innych podobnych. Aby to zrobić, użyj metody sanitize_filename() klasy Security. Oto przykład:

$filename = $this->security->sanitize_filename($this->input->post('filename'));

Jeśli użytkownik może dołączać ścieżki relatywne, np. file/in/some/approved/folder.txt, możesz ustawić drugi, opcjonalny parametr $relative_path na wartość TRUE.

$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);

Cross-site request forgery (CSRF)

Możesz włączyć ochronę przed atakami typu CSRF poprzez otwarcie pliku application/config/config.php i ustawienie wartości:

$config['csrf_protection'] = TRUE;

Jeśli korzystasz z helpera form i funkcji form_open(), to automatycznie zostanie dodane ukryte pole csrf do Twoich formularzy.